nginx 设置子目录时出现 404 错误

nginx 设置子目录时出现 404 错误

我正在向我的服务器(一个 wordpress 安装)添加一个子目录 /blog。

我在 nginx 上设置了以下配置,但在 /blog 上出现 404 错误。网站/配置的其余部分运行正常。

我错过了什么?

域名.com

server {
    listen      80;
    listen   [::]:80;
    server_name domain.com;

    return 301 https://domain.com$request_uri;
 }

server {
    listen 443  ssl;
    server_name domain.com;

    ssl_certificate    /etc/ssl/domain_com-bundle.crt;
    ssl_certificate_key    /etc/ssl/domain_com.key;

    root /opt/domain.com/public/;

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

      location /blog {
        root /var/www/html/siteWordpress/;
        index index.php index.html index.htm;
        try_files $uri $uri/ /index.php?q=$uri&$args;
      }

      location / {
        try_files $uri @backend;
      }

       location @backend {
     proxy_pass http://127.0.0.1:3030;
     proxy_http_version 1.1;
     proxy_set_header Upgrade $http_upgrade;
     proxy_set_header Connection 'upgrade';
     proxy_set_header Host $host;
     proxy_cache_bypass $http_upgrade;
   }

}

答案1

WordPress 使用 PHP,当前您已为文档根目录设置了 PHP /opt/domain.com/public/,但尚未为文档根目录设置 PHP /var/www/html/siteWordpress/

您需要添加嵌套的位置块:

location ^~ /blog {
    root /var/www/html/siteWordpress/;
    index index.php index.html index.htm;
    try_files $uri $uri/ /blog/index.php?q=$uri&$args;

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

修饰符^~是必需的,以使前缀位置优先于同一级别的其他正则表达式位置。请参阅这个文件了解更多信息。

语句上的默认 URItry_files应该以 为前缀,否则会执行/blog错误。index.php

以上内容假设 WordPress 安装在 下/var/www/html/siteWordpress/blog/,如果不是,您的配置将变得更加复杂。

WordPress 需要知道它托管在子目录中,例如,通过将以下内容添加到wp-config.php

define('WP_HOME','http://example.com/blog');
define('WP_SITEURL','http://example.com/blog');

相关内容