将 http://www.example.com/index.html 重定向到 http://www.example.com/ (不循环)

将 http://www.example.com/index.html 重定向到 http://www.example.com/ (不循环)

出于美观原因(我更喜欢 URL 和页面之间有严格的一一映射),我不喜欢http://www.example.com/index.htmlhttp://www.example.com/产生两个不同 URL 的相同内容。我希望http://www.example.com/作为规范的。

显而易见的解决方案:

Redirect permanent /index.html /

是错误的(无限循环)。

有更好的解决办法吗?这似乎出奇地困难。

答案1

尝试RewriteCond一下mod_rewrite

RewriteEngine On
RewriteCond %{QUERY_STRING} !^/$
RewriteRule /index.html / [R]

这表示如果查询字符串是不是 /然后重写/index.html/(不应循环)。

答案2

我的解决方案(似乎有效所以我接受了它)受到 PP 的回应的启发,它是:

RewriteEngine 开启
重写条件 %{REQUEST_URI} ^\/index\.html$
重写规则 .* http://www.example.com/ [R=302,L]

有没有非 modrewrite 解决方案?我不得不激活一个新的 Apache 模块,我尽量避免这种情况。

答案3

RedirectMatch ^/index.html$ http://www.example.com/

答案4

非 mod_rewrite 解决方案...实际上 joschi 几乎已经找到了它,但是由于某些(我不清楚的)原因,您必须绕过无限循环:

RedirectMatch permanent ^/index\.html$ http://www.example.com/
AliasMatch ^/$ /var/www/index.html

相关内容