我有一个非常基本的重写规则,我一直在试图实现这个目标。我有一个静态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结尾,第一条规则也会保持匹配。
答案 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从您的浏览器收到的原始请求,并且在执行一些重写规则后不会被覆盖。