重定向和重写以从网址中删除.html

时间:2014-04-10 20:38:06

标签: regex apache .htaccess mod-rewrite redirect

我有一个非常基本的重写规则,我一直在试图实现这个目标。我有一个静态HTML网站,我想要漂亮的网址。

所以,我希望/something提供/something.html,我也希望从/something.html重定向(外部)到/something,以免在SEO上因为托管重复而受到惩罚内容。

我不想使用Multiviews,我不想使用<rel cannonical="">

这就是我现在所拥有的。

RewriteRule ^(.*)\.html$ /$1 [R=302,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html [L]

导致无限重定向循环。

在我看来,即使请求的网址没有以.html结尾,第一条规则也会保持匹配。

1 个答案:

答案 0 :(得分:1)

是的,您的规则会导致重定向循环,因为REQUEST_URI(通过RewriteRule)会在应用规则后发生变化。

您可以使用:

    RewriteCond %{THE_REQUEST} \.html [NC]
    RewriteRule ^(.*)\.html$ /$1 [R=302,L]

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME}\.html -f
    RewriteRule ^(.*)$ $1.html [L]
  • THE_REQUEST变量表示Apache从您的浏览器收到的原始请求,并且在执行一些重写规则后不会被覆盖。