Назад | Перейти на главную страницу

Как изменить URL-адрес многосайтового блога Wordpress с помощью Nginx - proxy_pass? Местоположение с ошибкой регулярного выражения

Я установил экземпляр Wordpress Multisite (он же WPMU) на AWS для обслуживания четырех моих блогов, которые в настоящее время устанавливаются на одном сайте. Три блога работают в корневом домене, но один должен обслуживаться из / blog /, поскольку у меня есть собственный письменный веб-сайт в корне. Я не могу заставить WPMU обслуживать блог из подкаталога из-за ограничений программного обеспечения, хотя Wordpress на одном сайте может это сделать, поэтому я хотел бы посмотреть, смогу ли я сделать это с помощью Nginx.

Мой запасной вариант - это установка Wordpress на одном сайте, которой я бы предпочел избегать, поскольку она увеличивает накладные расходы на обслуживание и резервное копирование. Еще один выход - разместить блог на субдомене, что не так хорошо для SEO, поэтому я бы тоже предпочел избежать этого.

Я очень открыт для альтернативных решений, которые помещают блог в подкаталог с запущенным 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

Я думаю, что можно будет переписать что-то для работы с Wordpress Multisite с использованием Nginx, но я не могу с этим справиться. proxy_pass отлично работал для статического сайта (не могу опубликовать конфигурацию, моя репутация недостаточна для публикации такого количества ссылок), но я столкнулся с ошибкой

"proxy_pass" не может иметь часть URI в местоположении, заданном регулярным выражением "(и т. д.)

Я видел, как люди делали хитрые вещи с перезаписью в nginx, что убедило его в работе, но я не могу понять это правильно. Кто-нибудь может с этим помочь?

Я разместил несколько соответствующих блоков местоположения ниже, которые работают в моей текущей конфигурации ниже - конечно, все статические ресурсы 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

И не забудьте косую черту в конце:

Обратный прокси - удалить подкаталог