Вопрос или проблема
У меня есть настройка подсайтов в подкаталоге, все работает нормально, кроме одной небольшой проблемы…
Сайты настроены в следующей структуре:
http://domain.com/blogs/
http://domain.com/blogs/second/
http://domain.com/blogs/third/
Вы можете получить доступ к панелям администратора, если используете следующее:
http://domain.com/blogs/wp-admin/
http://domain.com/blogs/second/wp-admin/index.php
http://domain.com/blogs/third/wp-admin/index.php
Но если вы используете следующее (как делает WordPress в панели управления), то возникает петля перенаправления?
http://domain.com/blogs/second/wp-admin/
http://domain.com/blogs/third/wp-admin/
Кажется, существует какая-то переадресация, только когда index.php не указан в установках подкаталога, что это вызывает?!
Эта настройка многосайтовости была создана в WordPress 3.9.1 или ранее.
.htaccess
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
# добавляем косую черту к /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]
</IfModule>
# END WordPress
Не уверен, что вызвало это, но (не совсем чистое) исправление, которое сработало для меня:
RewriteRule ^blogs/([_0-9a-zA-Z-]+)/wp-admin/$ blogs/$1/wp-admin/index.php [L]
Ваша RewriteBase должна быть /blogs/
Как правило, при прохождении настройки сети вам будет указано, что должен делать ваш .htaccess, заменяя все предыдущие правила WordPress.
вместо :
RewriteBase /
вы должны иметь:
RewriteBase /blogs/
P.S. где находится этот .htaccess
? в корневом каталоге или в каталоге blogs
?
Ответ или решение
Для решения проблемы с петлей перенаправлений в multisite WordPress, связанной с доступом к панели администратора, необходимо подробно разбираться в нюансах настроек и перенаправлений сервера. Далее я объясню причины возникновения проблемы, предложу решение и укажу, как его применить.
Теория: Причины возникновения петли перенаправлений
При разработке и поддержке многосайтового WordPress-установки, особенно когда сайты располагаются в подкаталогах, могут возникнуть различные сложности с перенаправлениями. Основная задача ошибки состоит в том, что, пытаясь получить доступ к URL-адресу без явного указания index.php
для панели администратора подкаталога, происходит бесконечное перенаправление между несколькими URL-адресами.
Возможные причины:
- Неправильная конфигурация .htaccess: Выполняется перенаправление, когда отсутствует
index.php
в URL. - RewriteBase не соответствует структуре каталогов: Когда RewriteBase не настроен правильно, это может вызвать проблемы с правильной маршрутизацией запросов.
- Кэширование и модули сервера: Старый кэш или некорректная работа модулей, таких как mod_rewrite, могут вызывать неправильные перенаправления.
Пример: Описание проблемы с .htaccess и первое "ремесленное" решение
В данном случае, ваш текущий файл .htaccess настроен следующим образом:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
# добавление завершающего слэша к /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]
</IfModule>
# END WordPress
Это приводит к ситуации, когда попытка доступа по адресу http://domain.com/blogs/second/wp-admin/
вызывает перенаправление, так как не указан index.php
. Ваш временный "хак" решения проблемы добавлением правила перенаправления:
RewriteRule ^blogs/([_0-9a-zA-Z-]+)/wp-admin/$ blogs/$1/wp-admin/index.php [L]
Применение: Правильное решение проблемы
Для корректного решения необходимо исправить несколько моментов в конфигурации:
-
Правильная установка RewriteBase: Убедитесь, что RewriteBase соответствует структуре ваших директорий. В вашем случае, это должен быть путь
/blogs/
:RewriteBase /blogs/
-
Корректировка пути в .htaccess: Проверьте местоположение вашего файла .htaccess. Он должен находиться в корне вашего WordPress-установки, или необходимо задать относительные пути, если он в подкаталоге.
-
Тестирование на сервере: После внесения изменений сделайте тестирование конфигурации на тестовом сервере, чтобы убедиться, что перенаправления происходят корректно и нет повторных "петель".
-
Очищение кэша: После изменения конфигурации. Убедитесь, что кеш-движок (например, Varnish, Nginx, Cloudflare) очищен или обновлён.
-
Проверка модулей сервера: Удостоверьтесь, что все необходимые модули, такие как mod_rewrite для Apache, правильно установлены и активированы.
-
Журналирование и мониторинг: Настройте логирование ошибок и доступов на сервере, чтобы в будущем отслеживать подобные проблемы.
Дополнительные рекомендации
- Регулярно обновляйте WordPress и используемые плагины, чтобы избежать несовместимости с изменениями в ядре системы.
- Используйте инструменты для отслеживания изменений в файлах конфигурации, чтобы всегда иметь возможность откатиться к последней рабочей версии.
- Рассмотрите возможность использования managed WordPress хостинга, который автоматически решает многие технические аспекты, включая настройки multisite.
Таким образом, исправив конфигурации RewriteBase и проверив правильность настроек, вы сможете уверенно решить проблему с петлей перенаправлений в вашем multisite WordPress, гарантируя корректную работу административной панели для всех сайтов вашей установки.