首先,我遇到与this相同的问题(Cliff的注释:如果请求的URI是真实目录,mod_rewrite附加一个查询字符串)。
那里接受的解决方案(将“DirectorySlash Off”添加到.htaccess)对我不起作用。这不是我所挂断的,只是在它表明有任何密切关系的情况下我才会提起它。
经过一番思考后,我认为拥有可导航的重写链接“看起来像”对真实目录的引用可能并不好,所以我决定重命名相关目录。现在,mod_rewrite仍然会处理以前目录名称的请求,就好像它们一样。
所以,总结一下:
相关目录的.htaccess:
Options +FollowSymLinks -MultiViews
DirectorySlash Off
RewriteEngine On
RewriteBase /sitedir/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ index.php?p=$1 [NC,QSA,L]
通过注释/取消注释从重写文件中排除目录的条件的实验没有产生任何变化。
感觉它正在引用缓存的目录结构,但Googling向我保证Apache没有缓存。我错过了什么?