2011-10-05 36 views
1

我正在使用WAMP服务器,大部分配置为开箱即用。我无法让mod_rewrite在本地运行(在生产服务器上一切正常)。如何防止Apache/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文件?

回答

3

这听起来像你已经陷入了内容协商的陷阱;-)正如the Apache documentation解释,有一个选项叫MultiViews。启动时,导致Apache基本不存在转换的目录名称到其相应的文件名。

多视图的效果如下:如果服务器收到一个请求/some/dir/foo,如果/some/dir启用了多视图,并/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 

对应于/ajax/graphs一个<Directory><Location>块。或者,如果您无法访问主服务器配置,则可以将其放入/ajax/graphs/.htaccess

+0

像冠军一样工作!谢谢! –

+0

谢谢,解决了我2-3小时的神秘感。 –

相关问题