nginx 位置拒绝正则表达式不允许的文件扩展名

nginx location deny file extension not allowed by regex

nginx 我试图只允许一些扩展并拒绝 所有其他的 比如 gif,zip,exe,php 对于给定的子树。

我想使用正则表达式来定义 允许 扩展。

这是我使用负面展望的尝试:

location /wp-content/userimages/ {
  location ~* (\.(?!(jpg|png|jpeg)))$ {
    deny all;;
  }
}

(\.(?!(jpg|png|jpeg)))$ 正则表达式匹配输入末尾的 .,因为 \.$ 之间没有消耗模式。您需要为扩展添加一个消费模式,例如[^.]+ 匹配除 .:

之外的任何 1+ 个字符
\.(?!(png|jpe?g)$)[^.]+$

请注意,我将 jpeg|jpg 缩小为 jpe?g 并将字符串结尾检查添加到前瞻中,以便以禁止扩展名开头的扩展名(如 png2 (如果你曾经来过穿过它)) 可以匹配而 png 不能。