如何实现Nginx带语言参数的子路径重定向?
Nginx子路径重定向到带语言参数路径的解决方案
原有的rewrite ^/$ /$lang/ redirect;规则仅匹配根路径,无法覆盖子路径场景。要实现所有不带语言前缀的路径自动重定向到对应带$lang前缀的路径,可按以下步骤配置:
1. 确保$lang变量正确初始化
首先要保证$lang变量已通过合理方式获取(比如从Cookie、请求头读取,或设置默认值),示例配置:
# 优先从cookie获取语言,默认设为en set $lang en; if ($cookie_user_lang) { set $lang $cookie_user_lang; }
2. 调整重定向规则
使用负向预查正则避免对已带语言前缀的路径重复重定向,同时匹配所有需要处理的路径:
# 匹配所有非$lang前缀的路径,重定向到带$lang前缀的对应路径 rewrite ^/(?!$lang/)(.*)$ /$lang/$1 redirect;
规则说明
^/(?!$lang/):负向预查,确保当前路径不是以/$lang/开头,避免循环重定向(.*):捕获根路径之后的所有内容(包括空字符串,对应根路径场景)redirect:触发临时重定向(302),若需永久重定向可替换为permanent(301)
3. 特殊场景处理
如果有无需重定向的路径(比如静态资源目录),可在正则中添加排除项:
# 排除static目录和$lang前缀路径,其余路径重定向 rewrite ^/(?!$lang/|static/)(.*)$ /$lang/$1 redirect;
验证方式
用curl命令测试重定向效果:
# 测试子路径重定向 curl -I https://www.example.com/test # 测试根路径重定向 curl -I https://www.example.com/
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

