通过.htaccess移除/blog目录文件的.html及.html/amp后缀并301跳转
Apache 301跳转规则修正方案
需求场景
需要实现以下301永久跳转,统一目标路径:
https://www.example.com/blog/anyfile.html→https://www.example.com/blog/anyfilehttps://example.com/blog/anyfile.html/amp→https://www.example.com/blog/anyfilehttps://www.example.com/blog/anyfile.html/amp?nonamp=1→https://www.example.com/blog/anyfile
核心要求:移除.html后缀、.html/amp后缀及所有查询字符串,保留/blog目录和文件名。
原有规则的问题
之前的规则无法满足需求,原因如下:
- 正则
^.*/([^/]+)\.html$会匹配掉/blog/路径,只捕获文件名,导致跳转后丢失/blog目录 - 仅匹配
.html结尾的URL,未覆盖.html/amp及带查询参数的场景
修正后的规则
RewriteEngine On RewriteRule ^blog/([^/]+)\.html(/amp)?(/.*)?$ /blog/$1? [L,NC,R=301]
规则说明
^blog/:限定仅处理/blog/开头的请求,避免影响其他目录([^/]+):精准捕获文件名(如anyfile),确保不会包含路径斜杠\.html(/amp)?:匹配.html后缀,同时兼容可选的/amp后缀(/.*)?:匹配/amp之后的任意内容(包括查询参数),确保所有冗余部分都被忽略/blog/$1?:跳转目标路径,保留/blog目录和捕获的文件名,末尾的?用于清除原URL的查询字符串L:匹配后终止后续规则处理NC:不区分大小写匹配,增强规则兼容性R=301:明确指定为301永久跳转,符合SEO最佳实践
内容的提问来源于stack exchange,提问作者Alexander F.
相关产品推荐
相关产品推荐

