nginx 位置包含字符串 + 以结尾

Posted

技术标签:

【中文标题】nginx 位置包含字符串 + 以结尾【英文标题】:nginx location contains string + end with 【发布时间】:2018-10-16 15:25:12 【问题描述】:

如何在 nginx 中匹配位置:

包含 /render/framed/

以 .php 结尾

我尝试location ~ /render/framed/ 只是为了包含“/render/framed/”并且它有效。 但是找不到如何指定,必须以.php结尾

已尝试:location ~ /render/framed/+\.php$

有可能吗?

【问题讨论】:

试试/render/framed/.*\.php而不是/render/framed/+\.php$ @Sergio 不幸的是无法正常工作location ~ /render/framed/.*\.php 实际上,location ~ /render/framed/.*\.php$ 应该可以工作(注意$ 锚点)。可能,您可能需要使用双引号 location ~ "/render/framed/.*\.php$" ,但不确定。此外,请尝试将 ~ 替换为 ~* 以进行不区分大小写的匹配。 是的,应该可以工作,但这不是因为它是 404 响应 error_page 404 = /url_rewriting.php;location 不适用于 404 响应。 【参考方案1】:

快速搜索告诉我 NGINX 使用了良好的旧 PCRE 正则表达式风格。这就是你想要的 -

Sometext /render/framed/ .php - 应该匹配

Sometext /render/framed/ .txt - 不应该匹配

那么下面的模式应该可以工作。如果没有,您能否提供一些测试字符串和所需的输出。

.*(?:\/render\/framed).*(?:.php)$

【讨论】:

以上是关于nginx 位置包含字符串 + 以结尾的主要内容,如果未能解决你的问题,请参考以下文章

如何使用负前瞻(NOT lookbehind)来匹配在特定位置不包含给定子字符串的字符串?

编写一个子程序:将包含任意字符,以0结尾的字符串中的小写字母转变成大写字母

判断某个字符串是否出现在另一个字符串的最后面 或者 判断字符串1是否以字符串2结尾

js获取字符串最后几位字符数

JS如何判断字符串是以指定字符串结尾

正则表达式 选中以某些字符开始,某些字符结尾的字符串