nginx 未显示目录内部

nginx 未显示目录内部

下面是我的 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由最后一个位置块提供。

相关内容