我正在尝试为 /misc-stuff/ 目录中的(仅限图像)设置更长(30 天)的“过期”标头。
这是我在我的网站上使用的内容:
# Serve static files directly from nginx
location ~* \.(jpg|jpeg|gif|png|bmp|ico|pdf|flv|swf|exe|html|htm|txt|css|js) {
add_header Cache-Control public;
add_header Cache-Control must-revalidate;
expires 7d;
}
我希望能够保留该代码来处理常规站点图像,但创建一个新的块来处理 /misc-stuff/ 目录。
我努力了 :
location ^~ /misc-stuff/ {
...
}
我现在遇到的问题是,如果有人尝试访问该目录中的备份 .php 文件,它将显示为纯文本。
我该如何设置才能让 /misc-stuff/ 目录中的 .gif 图像受到影响?
答案1
^~
您选择文字字符串匹配前缀是否有充分的理由?^~
不支持正则表达式,因此您现在所拥有的无法轻易修复。但是,如果您盲目地从其他地方复制了此块而没有理解它,那么您很幸运;更改为~*
不区分大小写的正则表达式匹配前缀,并编写一个符合您需求的正则表达式:
location ~* ^/misc-stuff/.*\.(jpg|jpeg|gif|png)$ {
...
}
当然,.php
该目录中的文件可能仍与另一location
条指令匹配;如果您希望它们可执行,请务必编写一条location
指令,将这些文件发送到您选择的 PHP 解释器。(或者,如果您出于某种原因希望将它们保留在该目录中,但不执行它们或让其他人读取它们,请更改它们的权限以禁止服务器读取它们。)
虽然标准nginx 文档中有关该location
指令的内容有点缺乏,我发现nginx 维基百科相当好。