使用Htaccess重定向URL:匹配重定向参数到指定位置
解决旧URL带连字符slug的301重定向问题
问题分析
你之前的RewriteRule失效,核心原因是用了贪婪匹配的.*,导致slug里的连字符干扰了捕获组的正确性——.*会过度匹配内容,让后续的数字捕获组无法定位到正确位置。
正确的重写规则
针对你的URL结构,不管slug包含多少连字符,都可以通过精准的正则捕获和字符替换实现正确重定向:
RewriteEngine On # 匹配旧URL并生成目标新URL RewriteRule ^people/([^/]+)/(.+)-(\d+)/(.+)-(\d+)$ /link-$1-${2//-/\_}-${4//-/\_}--$3--$5.html [R=301,NC,L]
规则详解
^people/([^/]+)/:匹配开头的people/路径,用[^/]+精准捕获单个路径段的城市名到$1(避免过度匹配)。(.+)-(\d+)/:捕获第一个带连字符的slug到$2,并捕获该路径段末尾的数字到$3——(.+)贪婪匹配到最后一个连字符,确保不管slug有多少连字符都能完整捕获。(.+)-(\d+)$:捕获第二个带连字符的slug到$4,捕获末尾的数字到$5。- 替换部分:
${2//-/\_}和${4//-/\_}:将两个slug中的所有连字符替换为下划线,符合新URL的格式要求。--$3--$5:用双连字符分隔两个数字参数,对应目标URL的结构。
- 标记说明:
R=301表示永久重定向,NC忽略大小写,L表示当前规则匹配后停止后续规则处理。
验证示例
对于旧URL:https://www.example.com/people/city/example-page-146128/guest-house-with-ac-rooms-6396
会被正确重定向到:https://www.example.com/link-city-example_page-guest_house_with_ac_rooms--146128--6396.html
内容的提问来源于stack exchange,提问作者user1762269
相关产品推荐
相关产品推荐

