如何在.htaccess规则中使用自定义变量存储语言列表?
可以复用语言列表,只需修改一处即可
当然可以!你可以通过设置环境变量的方式,把语言列表只定义一次,后续规则直接复用,避免重复修改多条规则。
修改后的.htaccess配置
# 先捕获语言前缀,设置环境变量LANG,同时剥离前缀(避免循环) RewriteCond %{REQUEST_URI} !^index\.php$ RewriteRule ^((en|us|uk|fr|de)/)?(.*)$ $3 [E=LANG:$2] # 处理数字+分号格式的路径 RewriteRule ^([0-9\-.]+);([0-9\-.]+)$ index.php?l=%{ENV:LANG}&t=$1;$2 [QSA,L] # 处理字母+连字符格式的路径 RewriteRule ^([A-Za-z\-]+)$ index.php?l=%{ENV:LANG}&t=$1 [QSA,L]
关键说明
- 语言列表仅维护一次:第一个
RewriteRule里的(en|us|uk|fr|de)是唯一需要修改语言列表的地方,新增/删除语言时改这里就行。 - 环境变量传递语言值:用
E=LANG:$2把捕获到的语言代码(如en、fr)存入环境变量LANG,没有语言前缀时$2为空,完美匹配原规则的可选逻辑。 - 剥离前缀避免循环:第一个规则会把带语言前缀的路径(如
en/123;456)重写为123;456,后续规则直接处理剥离后的路径,同时通过%{ENV:LANG}获取语言值。
新旧规则对比
- 原规则:每条
RewriteRule都重复写语言列表,新增语言要修改2条规则 - 修改后:语言列表仅在第一个规则中定义,后续规则复用环境变量,只需修改1处
内容的提问来源于stack exchange,提问作者Martin Perry
相关产品推荐
相关产品推荐

