由于某些原因,
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./rewrite.php?p=$1&%{QUERY_STRING} [L]
不适合这样的url http://site.com/index/var/val
所有其他url都可以,但这个不行。它开始工作时,我要么删除!-f将位于根目录下的index.php文件部分或重命名为其他文件(例如test.php)。所以在mod_rewrite的眼中site.com/index似乎等于site.com/index.php ?这些文件位于根目录中,因此不应该涉及任何其他(上层).htaccess文件。这不会只发生在索引上,例如,如果我创建/something.xml, test.com/something/…会突然停止工作。这只发生在某些服务器上。
有人知道为什么会发生这种情况吗?
p。/index目录不存在
故障模块是mod_negotiation,不是mod_rewrite。
在debian:
a2dismod negotiation
编辑:更具体一点,这是Multiviews的效果,由mode_negotiation处理。因此,您可以保留模块并删除MultiViews处理:
Options -MultiViews
从文档:MultiViews搜索是由MultiViews选项启用的。如果服务器接收到/some/dir/foo的请求,而/some/dir/foo不存在,那么服务器读取目录查找所有名为foo的文件。*,并有效地占用一个命名所有这些文件的类型映射,为它们分配相同的媒体类型和内容编码,如果客户端按名称要求其中一个文件的话。然后,它选择与客户端需求最匹配的文档,并返回该文档。
我还通过从
中删除MultiViews关键字来解决这个问题。<Directory>
部分。
希望对你有帮助。
我相信${REQUEST_FILENAME}
处理文件就好像它是直接提供给浏览器的。
我有一个类似的问题:
-
/content/detailed-page
(重写URL, php解析)
文件以同样的方式返回给我:
-
/content/detailed-page.html
(real file)