You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.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临时重定向,确认没问题再改成301
  • L标志告诉Apache,这个规则处理完就停止后续的Rewrite规则,提升服务器处理效率

内容的提问来源于stack exchange,提问作者dmj5

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 08:53:14