为什么这个 nginx 位置部分导致我的 php 文件下载?

为什么这个 nginx 位置部分导致我的 php 文件下载?

这是我的 WordPress 网站的基本配置。

server {
    root          /var/www/site;
    listen        *****;
    server_name   *****;
    include       basics.conf;
}

一旦我添加位置部分以限制对 WP 登录的访问,wp-login.php 文件就会发送到浏览器,而不是作为 php 执行。我有

server {
    root          /var/www/site;
    listen        *****;
    server_name   *****;
    include       basics.conf;

    location ^~ /wp-login.php {
        auth_basic            "Restricted Area";
        auth_basic_user_file  /etc/nginx/.htpasswd;
    }
}

我尝试在 auth_ 设置后复制 basics.conf 中的内容,但也没有成功。我的位置 / 也在我的 basics.conf 中配置,因为我将它用于所有 php 站点。

server {
    root          /var/www/site;
    listen        *****;
    server_name   *****;
    include       basics.conf;

    location ^~ /wp-login.php {
        auth_basic            "Restricted Area";
        auth_basic_user_file  /etc/nginx/.htpasswd;

        index index.html index.htm index.php;
        allow all;

        if (-f $request_filename) {
            break;
        }
        if (!-f $request_filename) {
            rewrite ^/(.+)$ /index.php last;
            break;
        }
    }
}

这是我的 basics.conf

location / {
    index index.html index.htm index.php;
    allow all;

    if (-f $request_filename) {
        break;
    }
    if (!-f $request_filename) {
        rewrite ^/(.+)$ /index.php last;
        break;
    }
}
include php-fastcgi.conf;

这是我的 php-fastcgi.conf

location ~ \.php$ {
    try_files  $uri =404;
    fastcgi_intercept_errors on;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

那么,如何才能让我的登录信息受到 auth 保护,同时又能将其解析为 php 而不是发送到浏览器呢?

相关内容