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

如何用.htaccess重定向移除URL中重复的.html后缀?

解决URL中重复.html的重定向问题

核心方案

分两步处理路径和查询参数中的重复.html,同时通过精准条件避免重定向循环:

具体Apache Rewrite规则

将以下规则添加到.htaccess文件头部:

# 处理路径中的重复.html
RewriteCond %{THE_REQUEST} \s/+([^?\s]+?)(\.html)+(\?|\s)
RewriteRule ^ %1.html?%{QUERY_STRING} [L,R=302]

# 处理查询参数中的重复.html
RewriteCond %{QUERY_STRING} ^(.*?)(\.html)+(.*)$
RewriteCond %{QUERY_STRING} !^(.*?)\.html(.*)$ [NC]
RewriteRule ^ %{REQUEST_URI}?%1.html%3 [L,R=302]

规则细节说明

  • 路径处理逻辑:

    • 依赖%{THE_REQUEST}(原始请求行)匹配,避免内部重写后的循环触发——因为内部重写会改变REQUEST_URI,但THE_REQUEST始终保留用户初始请求的原始字符串
    • 正则([^?\s]+?)(\.html)+捕获路径中带重复.html的部分,将其替换为仅含单个.html的路径
    • [L,R=302]标记为当前规则组的最后一条,并发送302临时重定向
  • 查询参数处理逻辑:

    • 第一个条件匹配参数中存在连续.html的情况
    • 第二个条件排除已经是单个.html的参数,避免重复重定向
    • 保留处理后的路径,将参数中的重复.html合并为单个

对应测试案例验证

针对你给出的URL,重定向结果如下:

  1. https://mywebsite.com/pages.html?limit=24&start=7440&t=3349.html.html.html → https://mywebsite.com/pages.html?limit=24&start=7440&t=3349.html
  2. https://mywebsite.com/pages.html.html.html?limit=24&start=8136&t=3358 → https://mywebsite.com/pages.html?limit=24&start=8136&t=3358
  3. https://mywebsite.com/pages.html.html?limit=24&start=8136&t=3358.html.html.html.html → https://mywebsite.com/pages.html?limit=24&start=8136&t=3358.html

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 08:47:12