奇怪的重写(Apache mod_rewrite)

时间:2012-09-08 00:23:16

标签: php windows apache mod-rewrite wamp

我对我的重写规则的结果非常困惑。我使用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

浏览器' 地址栏中的

。我在Firefox 14,Opera 11.62和Internet Explorer 8下进行了测试。

在网址末尾添加斜杠,即

  

http://localhost/niklasrosenstein/res/

没问题。

有谁知道为什么在浏览器中调整网址'地址栏?我想使用 mod_rewrite 来摆脱模糊的URL格式,但这个问题实际上将其分解..

1 个答案:

答案 0 :(得分:2)

  

有谁知道为什么在浏览器的地址栏中调整了网址?

这看起来像是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]