![nginx url重写带有特殊字符的正则表达式](https://linux22.com/image/784469/nginx%20url%E9%87%8D%E5%86%99%E5%B8%A6%E6%9C%89%E7%89%B9%E6%AE%8A%E5%AD%97%E7%AC%A6%E7%9A%84%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F.png)
如何编写一个正则表达式来匹配带有保留字符(如 '+','-' )的路径节点?例如:
https://e.example.com/foo+/bar/file/test.txt
需要重写为https://e.example.com/bar/file/test.txt
我试过rewrite ^/foo+(/.*)$ break;
但无法匹配字符串。
有什么建议么?
答案1
Innginx
rewrite
指令使用规范化的 URI 进行匹配。规范化的 URI 不包括查询参数或索引搜索参数。
您也许可以map
在这里使用:
map $request_uri $filefromarg {
^[^+]*\+(.*)$ $1;
default $request_uri;
}
并且在server
块中你将拥有:
try_files $filefromarg $uri =404;
takes包含资源和查询参数的完整路径。第一行正则表达式捕获符号后的所有内容map
并将其设置为变量。$request_uri
+
$filefromarg
然后,在try_files
用作路径的部分中检查要提供的资源。