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