基于URL结尾规则配置.htaccess实现301重定向
Apache RewriteRule 301重定向:处理单数字结尾的URL
原始URL
domain.com/bla-bla-bla-2/ domain.com/cvb-sdffgh-ffdds-2/ domain.com/ssss-asdfgh-fdsaxcv-2/ domain.com/fgh-fgh-fgh-3/ domain.com/dcv-qwe-vbn-4/ domain.com/dcv-qwe-vbn-2020/ domain.com/dcv-qwe-vbn-99/ domain.com/dcv-qwe-vbn-9/
期望跳转的目标URL
domain.com/bla-bla-bla/ domain.com/cvb-sdffgh-ffdds/ domain.com/ssss-asdfgh-fdsaxcv/ domain.com/fgh-fgh-fgh/ domain.com/dcv-qwe-vbn/ domain.com/dcv-qwe-vbn-2020/ domain.com/dcv-qwe-vbn-99/ domain.com/dcv-qwe-vbn/
现有规则的问题
你写的规则存在两个明显问题:
- 语法错误:正则表达式末尾多了一个右括号
),直接导致规则无法被服务器解析 - 匹配范围不对:
\d+会匹配任意长度的数字,像dcv-qwe-vbn-2020/、dcv-qwe-vbn-99/这类多位数结尾的URL也会被错误重定向,不符合需求
修正后的可用规则
如果是在服务器配置文件(比如httpd.conf)中使用:
RewriteRule ^/(.*)-(\d)/$ /$1/ [R=301,L]
如果是在.htaccess文件中使用(不需要开头的/):
RewriteRule ^(.*)-(\d)/$ /$1/ [R=301,L]
规则说明
^(.*)-(\d)/$:^标记URL的起始位置(.*)捕获数字前面的所有内容(不含最后的-和数字)-(\d)精准匹配单数字前的连接符和单个数字(\d只匹配0-9中的一位)/和$确保只匹配以“单数字+斜杠”结尾的URL
/$1/:将请求重定向到捕获的第一组内容,也就是去掉结尾单数字后的路径[R=301,L]:R=301表示永久重定向(对SEO友好),L表示匹配到这条规则后就停止处理后续规则
这样配置后,只有结尾是单个数字加斜杠的URL会被重定向,多位数结尾的URL会保持原样,完全符合要求。
内容的提问来源于stack exchange,提问作者Oleksandr Kucherenko
相关产品推荐
相关产品推荐

