CodeIgniter, показывающий только контроллер по умолчанию

Я использованияконтактная в CodeIgniter в местных WAMP. Здесь код работает нормально. Но я загружаю в Cpanel (внутри example.com, имя папки вызов'mysite'). Там я изменился как,

  • db_name (config / database.в PHP)
  • db_user_name (config / database.в PHP)
  • db_password (конфигурация / база данных.в PHP)
  • base_url as http://example.com/mysite (config / config.в PHP)
  • uri_protocol как REQUEST_URI (config / config.в PHP)

, а также изменен .htaccess(mysite/.откройте файл. htaccess), как,

<IfModule mod_rewrite.c>

RewriteEngine On

# Set the rewritebase to your CI installation folder
RewriteBase /mysite/


# Send everything to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/ [L]

но не в mysite / application/.реврайт . Он пуст.

проблема в том, если я пойду http://example.com/mysite, он показывает страницу по умолчанию Как правильно. Но если я нажму любую ссылку (http://example.com/mysite/user/signin), он показывает ту же страницу по умолчанию. но URL-адрес изменяется.

помоги мне, Пожалуйста...

config.в PHP

$config['base_url'] = 'http://example.com/mysite';
$config['index_page'] = '';
$config['uri_protocol'] = 'REQUEST_URI';
$config['url_suffix'] = '';
$config['language'] = 'english';
$config['charset'] = 'UTF-8';
$config['enable_hooks'] = FALSE;
$config['subclass_prefix'] = 'MY_';
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_-';
$config['allow_get_array']      = TRUE;
$config['enable_query_strings'] = FALSE;
$config['controller_trigger']   = 'c';
$config['function_trigger']     = 'm';
$config['directory_trigger']    = 'd';
$config['log_threshold'] = 0;
$config['log_path'] = '';
$config['log_date_format'] = 'Y-m-d H:i:s';
$config['cache_path'] = '';
$config['encryption_key'] = '***';
$config['sess_cookie_name']     = 'ci_session';
$config['sess_expiration']      = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie']  = FALSE;
$config['sess_use_database']    = FALSE;
$config['sess_table_name']      = 'ci_sessions';
$config['sess_match_ip']        = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update']  = 300;
$config['cookie_prefix']    = "";
$config['cookie_domain']    = "";
$config['cookie_path']      = "/";
$config['cookie_secure']    = FALSE;
$config['global_xss_filtering'] = FALSE;
$config['csrf_protection'] = FALSE;
$config['csrf_token_name'] = 'csrf_test_name';
$config['csrf_cookie_name'] = 'csrf_cookie_name';
$config['csrf_expire'] = 7200;
$config['compress_output'] = FALSE;
$config['time_reference'] = 'local';
$config['rewrite_short_tags'] = FALSE;
$config['proxy_ips'] = '';
define('CSS_FOLDER' , 'application/assets/css');
define('DEFAULT_IMAGE_URL' , 'application/assets/images/default');

маршруты.в PHP

$route['default_controller'] = "welcome";
$route['404_override'] = '';
$route['user/(:any)'] = 'user/index';

15 ответов


$config['base_url'] = 'http://example.com/mysite/';

лучше :

$config['base_url'] = 'http://example.com/mysite';

попробуйте это :

RewriteBase /

RewriteEngine on
RewriteCond  !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /mysite/index.php/ [L]

я столкнулся с той же проблемой ..его решено, когда я использую

$config['uri_protocol'] = 'AUTO'; 

в config.РНР. .попробуйте использовать AUTO и PATH_INFO для того же

убедитесь, что rewrite_module включен в apache


Если вы планируете использовать подпапку на сервере, сделайте то же самое на локальном WAMP. Таким образом, вы можете проверить его перед отправкой на сервер.

Я давно использовал CI, но я думаю, что вы должны добавить mysite/ в какой файл config.

посмотреть: установка приложения CodeIgniter в подпапку


.код htaccess

восстановить настройки по умолчанию в config.php, надеюсь, это поможет вам.

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/ [PT,L]

CodeIgniter можно сказать, чтобы загрузить контроллер по умолчанию, когда URI нет, как будет в случае, когда запрашивается только корневой URL-адрес вашего сайта.Поэтому, как только замените свой стандартный conroller "добро пожаловать" на свой conrtoller в маршрутах.PHP , это может помочь вам


<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

попробуйте этот htaccess:

RewriteEngine on
RewriteCond  !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /mysite/index.php/ [L]

также вы должны были создать контроллер с именем user и этот контроллер должен ahve функции signin.


я использовал следующие .файл htaccess, и он работает для меня с cpanel.

# index file can be index.php, home.php, default.php etc.
DirectoryIndex index.php

# Rewrite engine
RewriteEngine On

# condition with escaping special chars
RewriteCond  !^(index\.php|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php/ [L,QSA]

удалить

$route['user/(:any)'] = 'user/index';

в ваши маршруты.PHP-файл. user / signin соответствует вышеуказанному условию, поэтому CI направляет запрос пользователю / индексу вместо функции" User "controller " signin".

чего вы пытаетесь достичь с помощью этой конфигурации маршрута?


открыть config.php и сделать следующее заменяет

$config['index_page'] = "index.php"
to
$config['index_page'] = ""

в некоторых случаях настройка по умолчанию для uri_protocol работает неправильно. Просто заменить $config ['uri_protocol'] = " авто" от $config ['uri_protocol'] = "REQUEST_URI"

HTACCESS

RewriteEngine on
RewriteCond  !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/ [L,QSA] 

иногда "ORIG_PATH_INFO" устраняет эту проблему. Таким образом, вы также можете попробовать еще раз с изменением uri_protocol на "ORIG_PATH_INFO"

$config['uri_protocol'] = "ORIG_PATH_INFO";

и base_url должен быть абсолютным,

$config['base_url'] = "http://example.com/mysite/";

ничего не пишите .htaccess файл и удалить $route ['user / (: any)'] = 'user/index'; линия и одна вещь, очень важная убедитесь, что в вашем сервере mod переписать расширение должно быть включено.

может поможет как включить mod_rewrite в php.ini на хостинге


Я решил ту же проблему, изменив имя файла контроллера, чтобы начать с заглавной буквы.

Так же, как по умолчанию "Добро пожаловать" контроллер загружен.


есть несколько вещей, которые вы должны принять во внимание. при настройке проекта с помощью codigniter framework. следующий файл, который вы должны внести изменения.

1).реврайт:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /mysite/index.php/ [L]  

2) application / config / config.в PHP

$config['base_url'] = 'http://example.com/mysite/';
$config['server_root'] = $_SERVER['DOCUMENT_ROOT'];
$config['index_page'] = '';
$config['uri_protocol'] = 'AUTO';  

3) приложение / конфигурация / база данных.в PHP

$db['default']['hostname'] = 'localhost'; // set your hostname
$db['default']['username'] = 'root'; // set database username
$db['default']['password'] = 'root'; //set database password
$db['default']['database'] = 'XYZ'; //set your database name
$db['default']['dbdriver'] = 'mysql';

4)приложений файле/config/маршруты.в PHP

$route['default_controller'] = "user";  //your default controller
$route['404_override'] = '';  

Примечание: код .реврайт файл должен находиться в корневом каталоге. здесь он должен быть в mysite папку


попробуй такое

$config['uri_protocol'] = 'PATH_INFO';
$config['enable_query_strings'] = FALSE;

Httaccess

<IfModule mod_rewrite.c>
RewriteEngine On

#Checks to see if the user is attempting to access a valid file,
#such as an image or css document, if this isn't true it sends the
#request to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/ [NC]
</IfModule>