首页 > 解决方案 > 正则表达式在 nginx 映射中无法按预期工作

问题描述

我正在尝试在 nginx 中实现一些 URL 重写规则。我使用类似的正则表达式来捕获有趣的组,它在 regex101 和 IIS 重写规则的正则表达式中完美运行,但在 nginx 映射中不起作用。我不确切知道 nginx 是否有特定的语法,我找不到。

  map $request_uri $new_uri {        
      default '';
      
      # this works without the query string part
      #"~^/r/([\S]+)\.jpg$" http://www.jackli.space/$1.jpg;

      "~^/r/([\S]+).(png|jpg|jpeg)\?a=(\d+)$" http://www.jackli.space/$1.$2?x=$3;
  }

我测试的示例图像 src url

<img src="r/images/bridge.jpg?a=100" />

相同表达式的正则表达式 101

标签: regexnginxurl-rewritingnginx-config

解决方案


您可以使用命名的捕获组尝试此块:

map $request_uri $new_uri {        
   default 0;
      
   # this works without the query string part
   #"~^/r/([\S]+)\.jpg$" http://www.jackli.space/$1.jpg;

   "~^/r/(?<file>\S+)\.(?<ext>png|jpg|jpe?g)\?a=((?<a>\d+)$" http://www.jackli.space/$file.$ext?x=$a;
}

推荐阅读