regex-如何匹配nginx中扩展名较少的文件的位置?

提问

要匹配具有特定扩展名的文件,我们可以使用以下命令:

位置〜.*.(php | jsp | cgi | pl | py)?${
}

并且所有工作都按预期进行…

但是,如果我们有没有任何扩展名的文件,该如何在“位置”块中将它们匹配呢?

最佳答案

正则表达式.*.(php | jsp | cgi | pl | py)?$匹配任意数量的字符(.*),后跟另一个字符(.)和零或一个出现的扩展名(…)?.由于您可以验证here,因此该正则表达式应该已经与没有扩展名的文件匹配,因为?.

评论澄清后更新

您可以使用正则表达式[^.](?!(php | jsp | cgi | pl | py))$表示要匹配多个字符,这些字符不能为句号,且后接扩展名.

第二次更新

根据docu of location

there is no syntax for NOT matching a regular expression. Instead,
match the target regular expression and assign an empty block

因此,您要匹配每个具有扩展名的文件并分配空块.它类似于您的原始正则表达式,但没有?并且最好将扩展名前的点转义,否则意味着任何字符.

location ~ .*\..+${}
评论