1

我对重写规则的结果感到非常困惑。我使用 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 下对其进行了测试。

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

http://localhost/niklasrosenstein/res/

没关系。

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

4

1 回答 1

2

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

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

DirectoryIndex index.html
DirectorySlash On

第二个默认设置使得任何时候请求似乎访问目录,并且缺少尾部斜杠,301 重定向到与斜杠相同的 URI。这发生在 URI 文件映射管道中的某处,并且干扰了 mod_rewrite 通过您的规则应用的内部重写

由于您正在通过 路由所有内容,因此关闭 DirectorySlashindex.php可能无害,因此在您目录中的 htaccess 文件中,尝试将其关闭:/niklasrosenstein/

DirectorySlash Off

否则,您可以尝试使用 mod_rewrite 处理:

RewriteCond %{REQUEST_FILENAME} -d
RewriteCond !.+[^/]$
RewriteRule ^(.+)$ $1/ [L]
于 2012-09-08T14:36:16.050 回答