王新阳

wangxinyang

CodeIgniter使用rewrite时出现404的原因

.htaccess中有如下一条,本意是要把/m重写为/m.php,结果总是 404错误

RewriteRule ^m/(.*)$ m.php/$1 [L]

原因:
config/config.php

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

要改为

$config['uri_protocol'[ = 'PATH_INFO';

否则CI无法根据重写后的uri获取请求的class和method,从而导致出错。
当访问地址为 http://abc.com/m   没有以 / 结尾时仍不能正确重写到 m.php,需要在.htaccess中增加如下一行(加在 RewriteRule ^m/(.*)$ m.php/$1 [L] 的前面):

RewriteRule ^m$ /m/ [R=301,NC,L]

参考:http://blog.csdn.net/newjueqi/article/details/12014673

如果服务器不支持$_SERVER['PATH_INFO'],可以在服务器上输入$_SERVER数组,查看是否支持$_SERVER['ORIG_PATH_INFO'],支持的话以ORIG_PATH_INFO代替PATH_INFO,当前要观察两个值是否相同,如果不相同,需要同时修改 system/core/URI.php 中关于$uri获取的部分。我本地电脑中ORIG_PATH_INFO和PATH_INFO的值不一样。阿里云虚拟主机不支持PATH_INFO,但ORIG_PATH_INFO的值却与我本地的PATH_INFO一样。

2017-06-16
2024-05-03 星期五 农历三月二十五