我有一个静态网站,有几个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-development
和site.com/website-development.html
重定向到site.com/website-development
(实际上是一个html文件 - website-development.html)。感谢。
答案 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