Php 奇怪的重写(Apache mod_重写)

Php 奇怪的重写(Apache mod_重写),php,windows,apache,mod-rewrite,wamp,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] 去 扩展到 在浏览器的地址栏中。我已经在F

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

RewriteEngine on
RewriteBase   /niklasrosenstein/

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

扩展到

在浏览器的地址栏中。我已经在Firefox14、Opera11.62和InternetExplorer8下进行了测试

在URL末尾添加斜杠,这将是

没关系

有人知道为什么浏览器的地址栏会调整URL吗?我想使用mod_rewrite来摆脱模糊的URL格式,但这个问题实际上破坏了它

有人知道为什么浏览器的地址栏会调整URL吗

这看起来像是mod_dir/mod_重写冲突。默认情况下,加载mod_dir,目录模块的默认值为:

DirectoryIndex index.html
DirectorySlash On
第二个默认设置是,只要请求访问目录,并且缺少一个尾随斜杠,301就会重定向到带有斜杠的同一URI。这发生在URI文件映射管道的某个地方,并且与mod_rewrite通过您的规则应用的内部重写相冲突

由于您正在通过
index.php
路由所有内容,因此可能不是这样,因此在
/niklasrosenstein/
目录中的htaccess文件中,请尝试将其关闭:

DirectorySlash Off
否则,您可以尝试使用mod_rewrite处理该问题:

RewriteCond %{REQUEST_FILENAME} -d
RewriteCond !.+[^/]$
RewriteRule ^(.+)$ $1/ [L]