如何用带多通配符的RewriteRule实现旧产品URL到新域名的重定向?
解决旧域名产品URL到新域名的301重定向问题
首先,你的产品URL重写规则存在正则语法错误,导致无法匹配目标URL。以下是修正后的完整规则及关键说明:
修正后的.htaccess完整代码
RewriteEngine On # 重写产品链接:匹配旧格式 /webshop/分类/detail/数字ID/产品名.html RewriteRule ^webshop/([^/]+)/detail/[0-9]+/([^/]+)\.html$ https://newsite.com/shop/$1/$2/ [R=301,NC,L] # 重写产品分类链接:匹配 /webshop/分类 格式 RewriteRule ^webshop/([^/]+)$ https://newsite.com/shop/$1/ [R=301,NC,L] # 静态页面定向规则 RewriteRule ^contact.html$ https://newsite.com/contact-us/ [R=301,NC,L] RewriteRule ^about-us.html$ https://newsite.com/about/ [R=301,NC,L] RewriteRule ^sale.html$ https://newsite.com/sale/ [R=301,NC,L] RewriteRule ^terms-and-conditions.html$ https://newsite.com/terms-and-conditions/ [R=301,NC,L] RewriteRule ^customs-and-tax-information.html$ https://newsite.com/customs-and-tax-information/ [R=301,NC,L] RewriteRule ^delivery-times-and-shipping-costs.html$ https://newsite.com/shipping/ [R=301,NC,L] # 剩余所有页面重定向(保留原路径) RewriteRule ^(.*)$ https://newsite.com/$1/ [R=301,NC,L]
关键修正点说明
产品规则正则修正
原规则错误使用$(正则结束符)导致匹配失败,新规则:([^/]+):精准匹配分类名称(仅匹配到第一个/前的内容,避免过度匹配)[0-9]+:专门匹配产品数字ID,替代泛用的.*提升准确性([^/]+)\.html:匹配产品名称并忽略.html后缀- 重定向目标中
$1对应分类、$2对应产品名,生成符合要求的新URL格式
规则顺序调整
产品规则必须放在分类规则之前,因为分类规则的匹配范围更广,如果先执行分类规则,产品URL会被错误识别为分类链接。分类规则目标修正
原规则https://newsite.com/(.*)$1/存在语法错误,修正为https://newsite.com/shop/$1/,确保分类页跳转到新域名的对应路径。剩余页面重定向优化
原规则会将剩余请求直接跳转到新域名根目录,丢失原路径。修正后保留原路径结构,避免不必要的404错误。
测试提示
- 调试时可暂时将
R=301改为R=302(临时重定向),避免浏览器缓存干扰测试结果,确认规则生效后再改回301 - 可通过服务器日志查看规则匹配情况,定位潜在问题
内容的提问来源于stack exchange,提问作者Robin R.
相关产品推荐
相关产品推荐

