1

我正在使用 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 文件?

4

1 回答 1

3

听起来您陷入了内容协商的陷阱;-) 正如Apache 文档中所解释的,有一个名为的选项MultiViews,当启用该选项时,会导致 Apache 基本上将不存在的目录名称转换为其相应的文件名。

MultiViews 的效果如下:如果服务器收到对 的请求/some/dir/foo,如果/some/dir启用了 MultiViews 并且/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.

于 2011-10-05T19:30:01.067 回答