You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Nginx配置文件中精准匹配双字符locale路径段?

Nginx精准匹配双字符locale路径段的配置方案

你的问题出在location /ru会匹配所有以/ru开头的路径(比如/russell),导致误触发重写规则。要实现仅匹配独立的双字符路径段ru(即/ru或/ru/开头的子路径),可以用以下两种方案:

方案一:精确匹配+前缀优先匹配

这种方式逻辑清晰,性能更优(Nginx对精确匹配和前缀匹配的优先级高于正则匹配):

# 精确匹配 /ru 单路径
location = /ru {
    rewrite ^ /?locale=ru;
}

# 匹配所有以 /ru/ 开头的子路径,^~ 确保优先处理该规则
location ^~ /ru/ {
    rewrite ^/ru/(.*)$ /$1?locale=ru;
}
  • location = /ru是精确匹配,仅当请求路径完全等于/ru时触发,不会匹配/ru/或/russell
  • location ^~ /ru/使用^~前缀,确保路径以/ru/开头时优先执行该块,避免被其他正则规则干扰,且不会误匹配/russell这类路径

方案二:正则匹配一次性处理两种情况

如果想把两种情况合并到一个location块,可以用正则规则精准匹配:

location ~ ^/ru(/|$) {
    rewrite ^/ru(/(.*))?$ /$2?locale=ru;
}
  • 正则^/ru(/|$)限定路径必须以/ru开头,后续要么是路径分隔符/,要么是路径结尾,彻底排除/russell这类误匹配
  • 对应的rewrite规则^/ru(/(.*))?$可以同时处理/ru和/ru/xxx两种场景,$2会自动填充后续路径(当请求是/ru时,$2为空,最终重写到/?locale=ru)

注意事项

  • 如果需要对外重定向(让浏览器URL显示重写后的地址),可以在rewrite后加上permanent(301永久重定向)或redirect(302临时重定向);如果只是内部转发不需要修改浏览器URL,保持现有规则即可,或根据需求添加last/break控制规则执行顺序
  • 若有多组locale(如/en、/zh),可以把规则通用化,比如用location ~ ^/([a-z]{2})(/|$),然后用$1作为locale值,避免重复写多组规则

内容的提问来源于stack exchange,提问作者Ali EXE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 05:25:12