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

Проблемы с перенаправлением .htaccess

Вот что мне нужно сделать.

Перенаправить 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]

У вас есть пара потенциальных проблем, которые могут объяснить, почему один работает, а другой нет ...

  1. Вы смешиваете mod_alias (RedirectMatch) и mod_rewrite (RewriteRule) директивы для внешних перенаправлений. Различные модули выполняются в разное время во время запроса и работают независимо. Это может привести к запутанным конфликтам. Если вы используете mod_rewrite, то безопаснее использовать mod_rewrite повсюду.

  2. Вы используете 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]