下面是我的 nginx 配置文件。它应该将 /inc 和 /admin/inc 设为内部,但我可以正常访问它们,好像该行根本不存在。它没有像应该的那样为外部请求提供 404。我尝试过加入一个拒绝所有;只是为了测试它是否匹配,但即使拒绝所有也没有用。我试过 #nginx 和一些系统管理员朋友,他们向我推荐了这里。
server {
listen 80;
root /var/www;
server_name localhost;
location / {
rewrite ^/((?i)sitemap-([^./]+)\.xml)$ /misc.php?google_seo_sitemap=$2;
try_files $uri $uri/ /index.php$uri&$args;
index index.php;
}
location /inc {
internal;
}
location /admin {
include inc/adminip;
location /inc {
internal;
}
location ~ \.php$ {
include inc/php;
}
}
error_page 404 /index.php;
error_page 500 502 503 504 /50x.html;
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires 7d;
access_log off;
add_header Cache-Control "public";
}
location ~ \.php$ {
include inc/php;
}
}
答案1
您没有显示任何 url,但我很确定它以 结尾.php
。
每个人都应该读nginx 如何选择位置。
简而言之,位置是独有的,并且通常 nginx 更喜欢使用正则表达式位置而不是前缀位置。为了防止这种情况,您必须^~
在位置中使用标志:
location ^~ /inc {
internal;
}
使用此块,任何以 开头的 URL/inc
都将被拒绝。但有一个警告,即使像/increment
或 这样的URL/income
也将被拒绝,这不是您通常想要的,因此最好使用尾部斜杠:
location ^~ /inc/ {
internal;
}
你的第二个内部块应该是
location ^~ /admin/inc/ {
internal;
}
顺便说一句,里面嵌套的 php 位置admin
不执行任何操作,因为 url/admin/whatever.php
由最后一个位置块提供。