Я добавляю подкаталог / блог на свой сервер, который является установкой wordpress.
Я установил следующую конфигурацию на nginx, но получаю ошибку 404 на / блог. Остальная часть сайта / конфигурации работает отлично.
Что мне не хватает?
domain.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;
}
}
WordPress использует PHP, и в настоящее время PHP настроен для корневого каталога документа /opt/domain.com/public/
, но не для корневого каталога документа / 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$ { ... }
}
Модификатор ^ ~
необходим, чтобы префикс местоположения имел приоритет над другим регулярным выражением локации на одном уровне. См. этот документ для получения дополнительной информации.
URI по умолчанию в инструкции try_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');