![使用 map 重写正则表达式](https://linux22.com/image/728621/%E4%BD%BF%E7%94%A8%20map%20%E9%87%8D%E5%86%99%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F.png)
我有一个url.map
包含重写规则
~^/A/shopby/(?<brand>[a-zA-Z]+) ~^/category/by-brand/$brand;
这样/A/shopby/a_brand
就会重定向到/category/by-brand/a_brand
还有一个config file
map $request_uri $new_uri {
include /etc/nginx/urls.map;
}
server {
rewrite_log on;
error_log /var/log/nginx/error.log notice;
if ($new_uri) {
# return 200 $new_uri; for debugging
rewrite $request_uri $new_uri permanent;
}
location / {
root /a_root;
index index.html;
try_files $uri $uri/ /index.html;
}
}
我一直得到这个
*60 "$request_uri" does not match "/A/shopby/a_brand"
,而且我的调试只返回了显示~^/category/by-brand/$brand
正则表达式没有替换捕获的字符串
我在这个过程中错过了什么?任何帮助都将不胜感激
答案1
您的rewrite
陈述不正确,因为第一个参数应该是正则表达式而不是变量。
但是,当您更改整个 URI 时,无需使用rewrite
。永久重写相当于return 301
。
例如:
if ($new_uri) {
return 301 $new_uri;
}
如果需要传递原始参数(rewrite
默认情况下会这样做),请使用:
if ($new_uri) {
return 301 $new_uri$is_args$args;
}
看这个文件了解详情。