这一集团
location ~ \.php$ {
deny all;
}
效果很好,可以阻止一切以 .php 结尾,并且到处也。
但当添加这个后上面的 bloc (提供静态文件)
location ^~ /cdn/ {
try_files $uri =404;
expires 365d;
}
cdn/test.php(存在)将被下载,而 cdn/test1.php(不存在)则会出现 404。
我尝试在 cdn 中添加 break; 或嵌套位置,但它无助于阻止 cdn 内的 .php。
答案1
问题在于^~
您使用的匹配字符。使用该前缀,nginx 不会在最长前缀匹配后检查正则表达式匹配。
您应该通过以下方式获得您想要的行为:
location /cdn {
try_files $uri =404;
expires 365d;
}