Nginx静态文件排除某个或某些文件扩展名

Nginx静态文件排除某个或某些文件扩展名

我正在通过 nginx 提供静态站点服务。

    location ~* \.(avi|bin|bmp|dmg|doc|docx|dpkg|exe|flv|gif|htm|html|ico|ics|img|jpeg|jpg|m2a|m2v|mov|mp3|mp4|mpeg|mpg|msi|pdf|pkg|png|ppt|pptx|ps|rar|rss|rtf|swf|tif|tiff|txt|wmv|xhtml|xls|xml|zip)$ {
        root /var/www/html1;
        access_log off;
        expires 1d;
    }

我的目标是排除类似这样的请求http://connect1.webinar.ru/converter/task/。完整视图就像这样http://mydomain.tld/converter/task/setComplete/fid/34330/fn/7c2cfed32ec2eef6788e728fa46f7a80.ppt.swf。尽管这些 URL 以这样的格式结尾,但它们不是静态的,而是假的脚本请求,所以我对它们有疑问。

最好的方法是什么?我如何为这个 URL 添加排除项,或者我是否可以从此 Nginx 位置的列表中排除特定的文件扩展名(.ppt.swf、pptx.swf)?

谢谢。

答案1

location ~* \.(?:avi|bin|bmp| ... |(?<!\.pptx\.|\.ppt\.)swf)$ {
    root /var/www/html1;
    access_log off;
    expires 1d;
}

$ man pcrepattern
$ man pcresyntax

答案2

由于您在静态文件的位置中使用正则表达式,因此您只需!pptx?\.swf向其中添加条件并排除条件即可swf

您的位置将如下所示:

位置 ~* \.(avi|bin|bmp| ... |!pptx?\.swf)$ {
        根/var/www/html1;
        访问登录关闭;
        1天后过期;
}

并且不要忘记为*.swf文件添加单独的位置:

位置 ~* [0-9a-z]*\.swf$
        根/var/www/html1;
        访问登录关闭;
        1天后过期;
}

答案3

您可以在 NGINX 配置中使用此代码排除特定文件或文件夹。

如果要排除特定文件,请添加此代码

location / {
    rewrite ^/((?!manifest.json|pwabuildersw.js).*)$ /index.php?slug=$1 last;
}

如果你想忽略特定文件夹,请添加此

location /assets {
  # Nothing here
}

参考:-忽略或排除 NGINX 中的特定文件或完整文件夹

相关内容