htaccess重定向循环问题

时间:2017-05-11 14:15:14

标签: html .htaccess redirect

我有一个静态网站,有几个html页面。为了不从网址隐藏.html个扩展名,我们在每个网址的htaccess中都有以下规则:

RewriteRule ^website-development$               website-development.html

这样可以正常工作,如果您打开site.com/website-development,它实际上会打开website-development.html文件,但在网址中它不会显示.html扩展名。

现在,我们需要将.html个网址重定向(或隐藏)到相应的网址,而不使用.html,例如如果有人在浏览器中打开site.com/website-development.html,则该网址应显示为site.com/website-development 为此,我添加了以下规则:

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

但这样做会导致无限期重定向,因此浏览器只会保持重定向,永远不会呈现实际页面。您能否建议我如何将site.com/website-developmentsite.com/website-development.html重定向到site.com/website-development(实际上是一个html文件 - website-development.html)。感谢。

1 个答案:

答案 0 :(得分:1)

是的确,此规则会导致重定向循环:

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

这是因为您的REQUEST_URI正在两个不同的规则中添加和删除.html,并且mod_rewrite在循环中运行。

您可以根据使用RewriteCond

THE_REQUEST来使用此规则
RewriteCond %{THE_REQUEST} \s/+(.+?)\.html[\s?] [NC]
RewriteRule ^ /%1 [R=301,NE,L]

THE_REQUEST变量表示Apache从您的浏览器收到的原始请求,并且在执行某些重写规则后不会被覆盖。此变量的示例值为GET /index.php?id=123 HTTP/1.1