【发布时间】:2016-11-30 08:25:38
【问题描述】:
在我的本地机器上测试网站时一切正常,但上传后只显示默认控制器。
这是我的设置:
网址: http://devilmay88.bplaced.net/live-access/
文件夹结构:
/live-access
/application
/system
/assets
config.php:
$config['base_url'] = 'http://devilmay88.bplaced.net/live-access/';
$config['index_page'] = '';
$config['uri_protocol'] = 'QUERY_STRING';
routes.php:
$route['default_controller'] = 'Welcome';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;
$route['assets/(:any)'] = 'assets/$1';
$route['login'] = 'Login';
.htaccess:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /live-access
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /live-access/index.php?/{controller}/{method}/$1 [L]
</IfModule>
.htaccess 文件位于 live-access 文件夹中,由于我在测试其他内容时遇到错误,它似乎被解释了。当我更改 uri_protocol 时,我得到的只是 404。codeIgniter 版本是 3.0.6。
有人知道这里有什么问题吗?
我刚刚发现 uri_string() 返回一个空字符串(也包括目前建议的 .htaccess 更改)。
【问题讨论】:
-
您能否提供一个适用于您的本地环境的示例 URL,以及不适用于您的托管环境的相关 URL?
-
通常人们在
RewriteBase /live-access/的末尾加上斜杠。考虑到这一点,您不需要在RewriteRule ^(.*)$ index.php/{controller}/{method}/$1 [L]中使用前导斜杠。另外我认为重复目录名称live-access就足够了。尝试删除 q 标记。经过测试,我会说这取决于我刚刚提出的最后一个。 -
小写应该是
$route['default_controller'] = 'welcome'; -
确保所有其他控制器文件名和类的第一个字母只有大写codeigniter.com/user_guide/general/…
-
控制器和控制器文件的首字母大写。我尝试了 wolfgang1983 和 Tpojka 建议的更改,但仍然没有任何更改。实际上,在我没有 .htaccess 的情况下,我在本地环境中工作,我怀疑由于子文件夹结构,这在网上无法正常工作(但我尝试过,但没有成功)。
标签: php .htaccess codeigniter