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

Неверные URL-адреса в wp-admin в WordPress с подкаталогом и прокси

Я использую apache2 и mod-proxy для интеграции блогов wordpress в подкаталоги моего TLD.

Виртуальный хост Apach2 основного сайта с прокси:

<VirtualHost *:80>
ServerName example.com

...

# Rewrite rule to add missing slashes
RewriteRule ^/blog$ /blog/ [R=301]
RewriteRule ^/other-blog$ /other-blog/ [R=301]

<Proxy *>
Order deny,allow
Allow from all
</Proxy>

ProxyRequests off
ProxyPass /blog/ http://blog1.localhost/
ProxyPassReverse /blog/ http://blog1.localhost/
ProxyPass /other-blog/ http://blog2.localhost/
ProxyPassReverse /other-blog/ http://blog2.localhost/

...

</VirtualHost>

Виртуальные хосты Apach2 для блогов:

<VirtualHost *:80>
ServerName blog1.localhost
DocumentRoot /var/www/blog1/
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
</VirtualHost>

Файл хостов Linux добавляет строки:

127.0.0.1     blog1.localhost localhost.localdomain
127.0.0.1     blog2.localhost localhost.localdomain

Wordpress: Настройки> Общие настройки:

Файл .htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Эта установка в целом работает нормально. К сожалению, серверная часть Wordpress имеет проблемы в некоторых частях из-за удаления подпапок в URL-адресах, что приводит к проблемам с сохранением настроек или загрузкой изображений. например.:

или

Что я пробовал до сих пор:

Ничего из этого пока не сработало и не усугубило ситуацию.

Если у кого-то есть идея, как решить эту проблему, я был бы очень признателен.

*) Edit: То, что я уже пробовал здесь:

define('WP_HOME',  'http://' . $_SERVER['HTTP_HOST'] . '/blog');
define('WP_HOME', 'http://example.com/blog');
define('WP_SITEURL', 'http://example.com' . $_SERVER['SERVER_NAME'] . '/blog');
define('WP_SITEURL', 'http://' . $_SERVER['SERVER_NAME'] . '/blog');
define('WP_SITEURL', 'http://example.com/blog/');

Абсолютные (и неправильные) пути находятся в контенте, созданном WordPress - нет способа переписать их с помощью Apache (как Apache узнает, какой блог имеется в виду, когда клиент запрашивает /wp-content?).

Правильный путь - это изменение URL-адреса сайта в конфигурации WordPress.

Для экземпляра blog1:

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

Для экземпляра blog2:

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

Что вы пробовали и какое поведение наблюдали?

Вам может потребоваться переместить ваши установки WordPress в подкаталог, чтобы решить эту проблему. Сделав это, отредактируйте свои правила перезаписи примерно так:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog1/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog1/index.php [L]
</IfModule>