我正在使用WAMP服务器,大部分配置为开箱即用。我无法让mod_rewrite在本地按预期运行(在生产服务器上一切正常)。
我的PHP文件位于:
/ajax/graphs/get-graph.php
通常调用此文件的方式是通过加载的引导程序文件
/index.php
我在根目录下有一个.htaccess文件,其中包含以下规则:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php [L]
所以,基本上,当我的应用程序通过AJAX请求调用/ajax/graphs/get-graph/
时,应将其定向到/index.php
。
问题是,Apache / mod_rewrite看到了请求路径并直接加载/ajax/graphs/get-graph.php
。
如何阻止Apache假设/ajax/graphs/get-graph/
是有效文件,因为该位置存在同名的php文件?
答案 0 :(得分:3)
听起来你已陷入内容协商的陷阱;-)如the Apache documentation中所述,有一个名为MultiViews
的选项,启用后会导致Apache基本上转换不存在的目录将名称命名为相应的文件名。
MultiViews的效果如下:如果服务器收到
/some/dir/foo
请求,如果/some/dir
启用了MultiView,并且/some/dir/foo
不存在,则服务器读取目录寻找名为foo.*
的文件,并有效地伪造一个命名所有这些文件的类型地图......
目的是您可以使用不同格式或语言的多个版本的文件,例如
/some/dir
- foo.en.gif
- foo.en.png
- foo.en.jpg
- foo.fr.gif
- foo.fr.png
- foo.fr.jpg
并且Apache将根据浏览器提供的首选项选择最佳的。
要修复它,您需要做的就是添加指令
Options -MultiViews
在与<Directory>
对应的<Location>
或/ajax/graphs
块中。或者,如果您无权访问主服务器配置,则可以将其放在/ajax/graphs/.htaccess
。