如何编写单个Apache Rewrite规则实现指定多语言路径跳转?
单个Apache Rewrite规则实现多区域/语言路径跳转
没问题,咱们用一条RewriteRule配合正则捕获组就能搞定所有这些跳转需求,完美匹配你提到的三种场景,甚至还能兼容结构一致的其他区域-语言组合。
直接上可用的规则:
RewriteRule ^/([a-z]{2})-([a-z]{2})/(.*)$ /content/company/$2/$1/$3 [R=301,L]
规则拆解与说明
我来一步步拆解这条规则,帮你搞懂它为什么能适配所有需求:
匹配部分:
^/([a-z]{2})-([a-z]{2})/(.*)$^/:精准匹配请求路径的起始斜杠([a-z]{2}):第一个捕获组,抓取两位小写字母的语言代码(比如en、fr)-:匹配路径里连接语言和区域的连字符([a-z]{2}):第二个捕获组,抓取两位小写字母的区域代码(比如us、ca)/:匹配语言-区域组合后的分隔斜杠(.*):第三个捕获组,抓取斜杠后的任意内容(就是你说的anything.html或其他任意字符串)
跳转目标:
/content/company/$2/$1/$3$2:引用第二个捕获组的区域代码(比如把us、ca放在前面)$1:引用第一个捕获组的语言代码(调整到区域代码之后)$3:原封不动引用第三个捕获组的内容(保留原请求的页面部分)
规则标志:
[R=301,L]R=301:表示永久重定向(如果是临时测试跳转,可改成R=302)L:标记为最后一条规则,匹配成功后不再执行后续Rewrite规则
实际匹配示例
举几个真实场景验证效果:
- 请求
/en-us/anything.html→ 跳转至/content/company/us/en/anything.html - 请求
/en-ca/abc.html→ 跳转至/content/company/ca/en/abc.html - 请求
/fr-ca/def→ 跳转至/content/company/ca/fr/def
注意事项
- 确保你的Apache服务器已经启用了
mod_rewrite模块 - 规则可放在
.htaccess文件(需服务器允许)或Apache虚拟主机配置中 - 如果路径可能包含大写字母,可把正则里的
[a-z]{2}改为[a-zA-Z]{2}以兼容大小写
内容的提问来源于stack exchange,提问作者Mohd Meesam
相关产品推荐
相关产品推荐

