Вот что мне нужно сделать.
Перенаправить sub1.domain1.co.uk
к sub2.domain2.com
Перенаправить sub2.domain2.com
к sub2.domain2.com/sub-folder
Оба они работают, НО это не так:
Переход непосредственно к sub1.domain1.co.uk/sub-folder
не перенаправляет на sub2.domain2.com/sub-folder
.
Вот мои перенаправления:
RedirectMatch ^/$ http://sub2.domain2.com/sub-folder
RewriteCond %{HTTP_HOST} ^sub1.domain1.co.uk$ [NC]
RewriteRule (.*) sub2.domain2.com/$1 [R=301,L]
У вас есть пара потенциальных проблем, которые могут объяснить, почему один работает, а другой нет ...
Вы смешиваете mod_alias (RedirectMatch
) и mod_rewrite (RewriteRule
) директивы для внешних перенаправлений. Различные модули выполняются в разное время во время запроса и работают независимо. Это может привести к запутанным конфликтам. Если вы используете mod_rewrite, то безопаснее использовать mod_rewrite повсюду.
Вы используете WordPress. Итак, у вас есть существующие директивы mod_rewrite, которые маршрутизируют запрос. Любые внешние перенаправления должны быть перед любые директивы маршрутизации WP.
RewriteRule (.*) sub2.domain2.com/$1 [R=301,L]
Вам также не хватает схемы (т.е. http://
) из подстановки, поэтому это будет выглядеть как родственник и сломать.
Итак, должно получиться следующее перед любые существующие директивы WordPress, в верхней части вашего .htaccess
файл:
# Redirect sub2.domain2.com/ to sub2.domain2.com/sub-folder
RewriteCond %{HTTP_HOST} =sub2.domain2.com [NC]
RewriteRule ^$ http://sub2.domain2.com/sub-folder [R=301,L]
# Redirect sub1.domain1.co.uk/<anything> to sub2.domain2.com/<anything>
RewriteCond %{HTTP_HOST} =sub1.domain1.co.uk [NC]
RewriteRule (.*) http://sub2.domain2.com/$1 [R=301,L]