ThinkPHP 非法操作、无法加载控制器 问题


您是否遇到下列问题?

:(

无法加载控制器: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;
}




联系客服:客服 客服 客服
0.102144s