1

我有一个 NGINX 服务器,我使用 Apache 实用程序的密码要求 (.htpasswd)。它大部分工作正常。以下这项工作正常:

example.com/admin
example.com/admin/
example.com/admin/index

但是...当我键入example.com/admin/index.php并且根本不键入任何密码并按“中止”时,服务器显示的是 index.php(没有任何 CSS 或 JS 文件)。我认为我的 PHP-FPM 是问题所在。请看一下:

location / {
    try_files $uri $uri.html $uri/ @extensionless-php;
    index index.html index.htm index.php;
}

location @extensionless-php {
    rewrite ^(.*)$ $1.php last;
}

location /admin {
    auth_basic "Restricted";
    auth_basic_user_file /admin/.htpasswd;
}

location ~ \.php$ {
    fastcgi_pass            127.0.0.1:9000;
    include                 fastcgi_params;
    fastcgi_param           SCRIPT_FILENAME $document_root$
}
4

1 回答 1

1

只需查看您问题中的最后两个位置:

location ^~ /admin {
    auth_basic "Restricted";
    auth_basic_user_file /admin/.htpasswd;

    location ~ \.php$ {
        fastcgi_pass  127.0.0.1:9000;
        include       fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

location ~ \.php$ {
    fastcgi_pass  127.0.0.1:9000;
    include       fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

添加^~修饰符使该location ^~ /admin块优先于其他正则表达式块(特别是现有location ~ \.php$块)。因此,身份验证规则统一应用于任何以 . 开头的 URI /admin。有关详细信息,请参阅此文档

为了避免破坏 PHP,location ~ \.php$块在块内被复制location ^~ /admin以处理以 . 开头/admin和结尾的URI .php

于 2016-06-02T08:39:59.677 回答