您是否遇到下列问题?
:(
无法加载控制器:Index.php
:(
非法操作:index.php
原因分析:
rewrite 是否有问题?
路径、控制器是否写错?
rewrite会导致无法识别地址路径、控制器名等问题,
开启 rewrite时, URL_MODEL=x 的规则有可能被覆盖掉。
也就是说 路径被 apache 或 nigix 或 iis7 的 rewrite 规则硬性的转换。
ThinkPHP 中的 URL_MODEL 则形同虚设。
如
访问 http://yoursite.com/index.php/Home 没有错误
访问 http://yoursite.com/index.php/Home/Index 没有错误
访问 http://yoursite.com/Home 没有错误
访问 http://yoursite.com/Home/ 没有错误
访问 http://yoursite.com/Home/Index 没有错误
访问 http://yoursite.com/Home/Index/ 没有错误
但
访问 http://yoursite.com/index.php/Home/ 有错误
访问 http://yoursite.com/index.php/Home/Index/ 有错误
区别就是有时末尾加了斜杠,同时服务器端的 (apche/nginx/iis7) 的 rewite 没有配置好,导致不能识别 控制器名 或 行为名。
可以通过 服务器端的 rewrite 规则 将尾部斜杠消除掉来处理。
或者取消 服务器端的 rewrite 规则(不是取消 rewrite支持),这时ThinkPHP的URL规则才能正确起效果。
如 在nginx环境中去掉末尾斜杠
if ( $request_uri ~ "/index.php/.*/$" ) { rewrite ^(.*)/$ $1? permanent; }