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

Posted

技术标签:

【中文标题】如何在nginx中匹配扩展较少文件的位置?【英文标题】:How to match location for extension less files in nginx? 【发布时间】:2012-10-08 12:28:45 【问题描述】:

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

位置 ~ .*.(php|jsp|cgi|pl|py)?$

一切都按预期工作......

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

【问题讨论】:

【参考方案1】:

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

评论澄清后更新

您可以使用正则表达式[^.]+(?!(php|jsp|cgi|pl|py))$,这意味着匹配多个字符,这些字符不能是句点并且后面不能跟列出的扩展名。

第二次更新

根据docu of location:

没有不匹配正则表达式的语法。反而, 匹配目标正则表达式并分配一个空块

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

location ~ .*\..+$ 

【讨论】:

您好,我可能还不够清楚。我想要的是现在匹配“仅”扩展名较少的文件! 如果我想要一些不同的东西怎么办......忘记这个例子,我为你提供了“扩展名”,我想忽略有扩展名的“任何文件”,只接受扩展名较少的文件,我该怎么做? 您必须使用负前瞻来确保没有扩展。 对不起,我在负前瞻部分迷路了:( @MarkWurkz 已更新。你怎么看?您希望阻止具有任何扩展名的文件还是仅阻止具有给定扩展名(php、jsp...)的文件?

以上是关于如何在nginx中匹配扩展较少文件的位置?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 nginx 在某个位置路径提供静态文件目录?

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

用Nginx如何配置运行无扩展名PHP文件或非.PHP扩展名文件

如何在该位置使用 Nginx 正则表达式

linux下如何查找nginx配置文件的位置

Nginx中的正则如何匹配数字