WordPress 和 nginx 所有頁面都正常,除了不存在的 .php

WordPress 和 nginx 所有頁面都正常,除了不存在的 .php

我在 Nginx 上設定了我的 WordPress 網站,一切正常,但對於不存在的 .php 頁面,這些頁面返回 nginx 預設 404 頁面未找到,為什麼?

# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
# include snippets/snakeoil.conf;

root /var/www/vpsproject.site;

# Add index.php to the list if you are using PHP
index index.php;

server_name vpsproject.site;


location / {
    #try_files $uri $uri/ =404;

    try_files $uri $uri/ /index.php$is_args$args;



}


# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
    include snippets/fastcgi-php.conf;

    # With php7.4-fpm:
    fastcgi_pass unix:/run/php/php7.4-fpm.sock;
}

      # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    location ~ /\.ht {
            deny all;
    }
    # deny access to .git related folders or files
    #
    location ~ /\.git {
            deny all;
    }

答案1

發生這種情況是因為 nginx 將對檔案的請求傳送.php到在套接字上偵聽的 PHP-FPM 進程unix:/run/php/php7.4-fpm.sock。然後 PHP-FPM 進程檢查檔案是否存在,如果不存在,則傳回 404 狀態碼。

同時,所有其他 URL 的預設請求流程是 nginx 首先檢查檔案或目錄是否存在。如果存在,則發送內容。

否則,nginx 將請求傳送到/index.php,然後透過套接字傳送到 PHP-FPM 進程。

然後 WordPress 前端控制器處理該請求,如果未找到,則提供自己的 404 頁面。

相關內容