【发布时间】:2021-07-20 02:48:40
【问题描述】:
我正在尝试在 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" />
【问题讨论】:
-
你能显示你正在尝试使用的重写规则吗?
-
这里是 nginx
map $request_uri $new_uri { default ''; "~^/r/([\S]+).(png|jpg|jpeg)\?a=(\d+)$" http://www.jackli.space/$1.$2?x=$3; } server { listen 4000; location / { if ($new_uri) { rewrite ^(.*)$ $new_uri permanent; } proxy_pass http://backend:5000; } }的示例配置文件 -
尝试
return 301 $new_uri;而不是rewrite指令。而且您最好将该配置片段添加到您的问题中,cmets 中的降价格式不适合多行代码块。 -
@IvanShatsky,我试过这个,它不工作。我之所以没有将配置放在问题中是因为它无关紧要,问题出在正则表达式中而不是在配置中。
-
我在您的正则表达式中看不到任何错误。在我的本地机器上进行了测试,一切都按预期工作(请参阅使用的 nginx 配置和 curl 日志here)。
标签: regex nginx url-rewriting nginx-config