Вопрос или проблема
У меня есть мультисайтовый веб-сайт с 5 доменами на WordPress, который использует плагин WordPress MU Domain Mapping.
Я хочу перенаправить каждую подсистему на новый домен, но мы все равно будем использовать главную страницу, потому что на ней есть некоторые ссылки, поэтому корневая, wp-admin
и wp-login
должны оставаться доступными и не перенаправляться. Как это настроить в .htaccess
, чтобы WordPress продолжал функционировать?
пример домена:
oldone.com/ --> без перенаправления
oldone.com/wp-admin --> без перенаправления
oldone.com/wp-login --> без перенаправления
oldone.com/about --> newone.com/about
oldone1.com/about --> newone1.com/about
... и т.д. ...
.htaccess
:
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
# загруженные файлы
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [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).*) $1 [L]
RewriteRule ^[_0-9a-zA-Z-]+/(.*\.php)$ $1 [L]
RewriteRule . index.php [L]
### перенаправление oldone.com
RewriteCond %{HTTP_HOST} ^oldone.com$ [NC]
# перенаправляет domain.com на www.oldone.com
RewriteRule ^(.*)$ http://oldone.com/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^www\.oldone.com\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/(wp-login/?|$)
RewriteCond %{REQUEST_URI} !^/(wp-admin/?|$)
RewriteRule ^(.*)$ http://newone.com/$1 [R=301,L]
####
Попробуйте добавить что-то вроде следующего в верхнюю часть вашего .htaccess
файла:
RewriteCond %{HTTP_HOST} ^(www\.)?oldone\.com
RewriteCond ${REQUEST_URI} !^/wp-admin
RewriteCond ${REQUEST_URI} !^/wp-login
RewriteRule . http://newone.com%{REQUEST_URI} [R,L]
Убедитесь, что кеш браузера очищен. Меняйте на 301 (если это намерение) только когда будете уверены, что все работает корректно.
Повторите для любых других комбинаций oldoneN.com
/ newoneN.com
, если нет какой-либо закономерности в названиях доменов?
В качестве альтернативы, если вы никогда не хотите перенаправлять /wp-admin
или /wp-login
и т.д. для любого домена, то вы можете включить исключение для этих URL-путей. Хотя это, вероятно, может повлиять на некоторые другие директивы MU.
Ответ или решение
Ответ на вопрос о мультсайтовом редиректе на новые домены
У вас есть мультсайтовый сайт на WordPress с пятью доменами, для которых используется плагин WordPress MU Domain Mapping. Существует необходимость перенаправить все подстраницы на новые домены, при этом оставив доступными корневую страницу, админку (wp-admin) и страницу входа (wp-login). Давайте разберем, как это можно реализовать в файле .htaccess
.
Изменения в файле .htaccess
Для достижения необходимого поведения можно внести следующие изменения в начало вашего файла .htaccess
:
RewriteEngine On
RewriteBase /
# Исключаем корневую страницу, wp-admin и wp-login
RewriteCond %{HTTP_HOST} ^(www\.)?oldone\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/wp-admin
RewriteCond %{REQUEST_URI} !^/wp-login
RewriteRule ^(.*)$ http://newone.com/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^(www\.)?oldone1\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/wp-admin
RewriteCond %{REQUEST_URI} !^/wp-login
RewriteRule ^(.*)$ http://newone1.com/$1 [R=301,L]
# другие домены можно добавить аналогичным образом
Объяснение:
-
RewriteEngine On: Включает механизмы перезаписи URL.
-
RewriteBase /: Устанавливает базовый путь для правил перезаписи.
-
RewriteCond:
- %{HTTP_HOST}: проверяет, является ли текущий запрашиваемый домен
oldone.com
или другой его вариант (например,www.oldone.com
). - %{REQUEST_URI}: исключает пути
/wp-admin
и/wp-login
из редиректа.
- %{HTTP_HOST}: проверяет, является ли текущий запрашиваемый домен
-
RewriteRule: Если условия выполнены, выполняется перенаправление на соответствующий новый домен с сохранением структуры URL.
Дополнительные рекомендации:
-
Очистите кеш браузера: После внесения этих изменений обязательно очистите кеш браузера, чтобы изменения вступили в силу.
-
Проверка перед установкой 301: Если это тестовый редирект, используйте код 302, что обозначает временное перенаправление. Код 301 (постоянное) можно установить только после полной проверки работоспособности.
-
Добавление других доменов: Вы можете продолжить по аналогии добавлять правила для других доменов, созданием дополнительных блоков
RewriteCond
иRewriteRule
.
Таким образом, вы сможете успешно выполнить эту задачу по перенаправлению подстраниц на новые домены, сохранив доступ к корневой странице, админке и странице входа. Если у вас есть дополнительные вопросы или необходима помощь, не стесняйтесь задавать их.