nginx url重写带有特殊字符的正则表达式

nginx url重写带有特殊字符的正则表达式

如何编写一个正则表达式来匹配带有保留字符(如 '+','-' )的路径节点?例如:

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用作路径的部分中检查要提供的资源。

相关内容