我正在向我的服务器(一个 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');