apache的MultiViews的问题

问题:

前提:ThinkPHP框架
今天配置服务器访问路径如下:

http://**.com/index/index
发现最后得到的$_SERVER的[PATH_INFO]的值只有/index
这样其实就是默认访问了index控制器,而并没有直接访问到index方法
也就是当url改为:
http://**.com/index/find
的时候的$_SERVER的[PATH_INFO]的值只有/find
这样其实就是访问了find控制器,而并没有直接访问到index控制器的find方法

以上问题所在。

解决

查找了半天觉得肯定是$_SERVER的问题,也就是服务器apache的配置问题,所以进一步查询了一下发现,apache的MultiViews选项的作用如下:

MultiViews的作用是当访问到目录中不存在的对象时,
如访问"http://localhost/test/target",
则apache会寻找该目录下的所有target.*文件.
如果test目录下存在target.jpg文件,
则会把这个文件返回给客户,
而不是返回出错信息.
再分析一下我们现在面对的实例.由于MultiViews的特性,
当访问“http://servername/Index/index”时.
由于根目录下存在index.php文件
所以上面的访问会变成这样:
"http://servername/Index.php/index"

所以会出现访问不到想要的方法的问题。也就是想要访问到就把配置文件中的:

<Directory  "/www/demo">
        Options +FollowSymLinks +MultiViews
        AllowOverride All
        Require all granted
    Directory>

的+MultiViews去掉

以上

你可能感兴趣的:(PHP)