我对重写规则的结果感到非常困惑。我用wamp在本地机器上托管。

RewriteEngine on
RewriteBase   /niklasrosenstein/

RewriteCond   %{REQUEST_URI}    !res/(.+)$
RewriteCond   %{REQUEST_URI}    !index.php$
RewriteRule   ^(.*)$            index.php?uri=$1 [QSA]


http://localhost/niklasrosenstein/res
扩展到
http://localhost/niklasrosenstein/res/?uri=res
在浏览器的地址栏中。我已经在Firefox14、Opera11.62和InternetExplorer8下测试过了。
在url的末尾添加斜杠
http://localhost/niklasrosenstein/res/
可以.
有人知道为什么在浏览器的地址栏中调整url吗?我想使用mod_rewrite来消除模糊的url格式,但这个问题实际上破坏了它。

最佳答案

有人知道为什么在浏览器的地址栏中调整url吗?
这看起来像mod_dir/mod_rewrite冲突。默认情况下,加载mod_dir,目录模块的默认值为:

DirectoryIndex index.html
DirectorySlash On

第二个默认设置是这样的,当请求出现访问目录,并且缺少一个尾随斜杠时,301重定向到与斜杠相同的uri。这发生在uri文件映射管道的某个地方,并与mod_rewrite通过规则应用的内部重写相冲突。
由于您正在通过index.php路由所有内容,因此它可能不是detrimental to turn off DirectorySlash,因此在/niklasrosenstein/目录中的htaccess文件中,尝试将其关闭:
DirectorySlash Off

否则,可以尝试使用mod_rewrite来处理:
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond !.+[^/]$
RewriteRule ^(.+)$ $1/ [L]

09-05 00:52