Nginx 密码保护目录不适用于更深层次的链接

Nginx password protected directory not working for deeper links

我有一个受 Nginx 密码保护的目录,如果您转到 mydomain.com/protected_folder/,它就可以正常工作。但是,如果我转到 mydomain.com/protected_folder/index.php 页面加载正常......但它不应该。

如何设置我的位置块以完全阻止通过受保护目录的所有访问?

我的街区:

location /protected_folder {
        try_files $uri $uri/ =404;
        auth_basic "Protected Folder Login";
        auth_basic_user_file /etc/nginx/my_pass;
         }

作为旁注。当我用密码保护整个站点时,这不是问题。

问题是.php 个文件没有被这个位置块处理。它们由 location ~ \.php$.

等位置块处理

如果您使用 ^~ 修饰符,您将强制此位置块具有比正则表达式位置块更高的优先级。有关详细信息,请参阅 this document

这当然会阻止 //mydomain.com/protected_folder/index.php 正确执行。要更正此问题,您将需要一个嵌套的 location ~ \.php$ 块来处理 /protected_folder.

下的 .php 文件

例如:

root /path/to/root;

location ^~ /protected_folder {
    try_files $uri $uri/ =404;
    auth_basic "Protected Folder Login";
    auth_basic_user_file /etc/nginx/my_pass;

    location ~ \.php$ {
        ...
    }
}

location ~ \.php$ {
    ...
}

嵌套的 location ~ \.php$ 块是 server 块中现有 location ~ \.php$ 块的副本。