Я установил экземпляр Wordpress Multisite (также известный как WPMU) на AWS для обслуживания четырех своих блогов, которые в настоящее время устанавливаются на одном сайте . Три блога работают в корневом домене, но один должен обслуживаться из / blog /, поскольку у меня есть собственный письменный веб-сайт в корне. Я не могу заставить WPMU обслуживать блог из подкаталога из-за ограничений программного обеспечения, хотя Wordpress на одном сайте может это сделать, поэтому я хотел бы посмотреть, смогу ли я сделать это с помощью Nginx.
Мой запасной вариант - установка Wordpress на одном сайте, чего я бы предпочел избежать, поскольку она увеличивает накладные расходы на обслуживание и резервное копирование. Другой выход - размещение блога на субдомене, что не так хорошо для SEO, поэтому я бы тоже предпочел избежать этого.
I ' ve очень открыты для альтернативных решений, которые помещают блог в подкаталог с запущенным WPMU
Он должен выглядеть так для зрителя
example.com <- Viewer sees custom PHP application
example.com/blog/ <- Viewer sees WPMU blog
blog.example.com <- hidden from viewers
Я думаю, что это может быть настроено так
example.com <- Runs custom PHP written application
blog.example.com <- WPMU runs on a subdomain, mapped to a subfolder of the main domain by Nginx
I думаю, что можно переписать что-то для работы с Wordpress Multisite с помощью Nginx, но я не могу с этим справиться. proxy_pass отлично работал для статического сайта (не могу опубликовать конфигурацию, моя репутация недостаточна для публикации такого количества ссылок), но я столкнулся с ошибкой
"proxy_pass" не может иметь часть URI в местоположении, указанном обычным выражение "(etc)
Я видел, как люди проделывали хитрые вещи с перезаписью в nginx, что убедило его работать, но я не могу понять это правильно. Может ли кто-нибудь помочь с этим?
I ' Мы разместили несколько соответствующих блоков местоположения ниже, которые работают в моей текущей конфигурации ниже - конечно, все статические ресурсы js / css / jpeg / etc должны быть перенаправлены, поскольку WPMU все равно будет генерировать html, который ссылается на поддомен
# We want all resources in the wp-content/uploads/20x and uploads/galleries
# folders to redirect to wp-content/uploads/sites/$blogid/whatever
location ~* "wp-content\/uploads\/((\d{4,}\/\d{2,}|galleries).*)" {
alias /var/www/wordpress/wp-content/uploads/sites/$blogid/$1;
return 301 $scheme://$host/wp-content/uploads/sites/$blogid/$1;
}
# Set caching headers for images
location ~* \.(jpg|jpeg|png|gif|css|js)$ {
log_not_found off; access_log off;
add_header Cache-Control "public";
expires 4h;
}
# Send HipHop and PHP requests to HHVM
location ~ \.(hh|php)$ {
fastcgi_keep_conn on;
fastcgi_intercept_errors on;
fastcgi_pass php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
Если это был простой блок без регулярного выражения, как в моем статическом тесте, что-то вроде этого, вероятно, сработает
# Send HipHop and PHP requests to HHVM
location ~ \.(hh|php)$ {
proxy_pass http://example.com
fastcgi_keep_conn on;
fastcgi_intercept_errors on;
fastcgi_pass php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
Вот пошаговое руководство, как это сделать:
https://yuji.wordpress.com/2010/03/08/nginx-wordpress-proxy-subdirectory -to-wordpress-subdomain /
В конце концов, автор этого не советует. Я бы пошел по-другому, чтобы, возможно, избежать некоторых из его неудачных опытов, - это переписать URL. Это можно сделать с помощью субмодуля nginx string вместо Wordpress:
http://nginx.org/en/docs/http/ngx_http_sub_module.html
В этих ссылках есть дальнейшие объяснения по проксированию и перезаписи:
https://stackoverflow.com/questions/9233368/nginx-server-configuration-subdomain-to-folder
И не забудьте косую черту в конце: