使用 map 重写正则表达式

使用 map 重写正则表达式

我有一个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;
}

这个文件了解详情。

相关内容