Nginx如何实现动态重定向缺失/en前缀的动态产品页URL
Nginx 动态补全/en前缀重定向配置方案
原有配置失效原因
- 未加正则匹配标识:Nginx的location默认是前缀匹配,要启用正则匹配必须在路径前加
~(区分大小写)或~*(不区分大小写)标识 - 路径拼写错误:配置中的
/produk/、/end/about/和实际业务路径/product/、/en/不匹配 - 没有捕获动态路径参数:无法获取用户访问的产品后缀,不能动态生成目标地址
正确配置方案
方案一:rewrite全局规则(推荐,简洁高效)
直接在站点对应的server块中添加以下规则即可:
# 同站点重定向可以省略域名,适配性更强 rewrite ^/product/(.*)$ /en/product/$1 permanent; # 跨站点或者需要固定域名的场景可以写完整地址 # rewrite ^/product/(.*)$ https://myweb.com/en/product/$1 permanent;
规则说明:
^/product/(.*)$仅匹配路径开头为/product/的请求,(.*)会捕获/product/后的所有路径内容存入变量$1permanent对应301永久重定向,测试阶段可以替换为redirect使用302临时重定向,避免浏览器缓存错误规则- 自动适配所有产品路径,无需逐个配置
方案二:location正则匹配(适合需要额外配置该路径规则的场景)
如果需要对/product/路径单独配置其他规则,可以用location块实现:
location ~ ^/product/(.*)$ { return 301 /en/product/$1; }
注意:开头的~是正则匹配标识,不可省略。
配置生效步骤
- 执行
nginx -t测试配置语法是否正确,返回test is successful再进行下一步 - 执行
nginx -s reload重载Nginx配置使规则生效 - 测试建议使用浏览器无痕模式,避免旧的重定向缓存影响验证结果
内容的提问来源于stack exchange,提问作者Inadrawiba
相关产品推荐
相关产品推荐

