如何在.htaccess中将*.htm、*,htm、*.html重定向至*.html并解决重定向循环问题
解决HTACCESS重定向循环:统一.htm/逗号版htm/html到.html且避免循环
嘿,我来帮你搞定这个重定向循环的问题!你的规则之所以会出现循环,核心原因是它会匹配已经是.html结尾的URL,然后把它重定向到完全一样的URL,浏览器就会陷入无限重复重定向的死循环里。
问题出在哪?
你原来的规则:
RewriteEngine On RewriteRule ^(.*)(\.|,)htm(l?)$ $1.html [R=301]
这里的正则表达式^(.*)(\.|,)htm(l?)$里,l?是可选匹配,意味着.html也会被命中——比如访问page.html时,正则会捕获page作为$1,然后重定向到page.html,和原URL完全一致,自然就触发循环了。
修改后的正确规则
我们只需要加一个条件,排除已经是.html结尾的请求,再加上L标志确保规则执行后停止后续处理,就可以解决问题:
RewriteEngine On # 排除已经是.html结尾的请求,避免循环 RewriteCond %{REQUEST_URI} !\.html$ # 匹配.htm、,htm、.html、,html格式的URL,重定向到对应的.html RewriteRule ^(.*)(\.|,)htm(l?)$ $1.html [R=301,L]
效果验证
修改后这些场景都能正常工作:
- 访问
page.htm→ 自动重定向到page.html - 访问
page,htm→ 自动重定向到page.html - 访问
page,html→ 自动重定向到page.html - 访问
page.html→ 保持原URL不变,不会触发任何重定向
额外说明
R=301是永久重定向,适合SEO场景;如果是测试阶段,可以先用R=302临时重定向,确认没问题再改成301L标志告诉Apache,这个规则处理完就停止后续的Rewrite规则,提升服务器处理效率
内容的提问来源于stack exchange,提问作者dmj5
相关产品推荐
相关产品推荐

