Переписывание для обработки одного домена из двух папок в два домена без папки

#regex #apache #.htaccess #mod-rewrite

Вопрос:

Я пытаюсь создать правила перезаписи для обработки некоторых конкретных перенаправлений веб — сайта:

Я бы хотел, чтобы домен 1.ca/folder1/xyz чтобы перейти в домен 2.ca/xyz и домен 1.ca/folder2/xyz чтобы перейти в домен 3.ca/xyz

Прямо сейчас мои попытки заключаются в следующем:

 RewriteCond %{HTTP_HOST} ^domain1.ca$ [OR]
RewriteCond %{HTTP_HOST} ^www.domain1.ca$
RewriteRule ^(/folder1/)(.*)$ "https://domain2.ca/$1" [R=301,L]

RewriteCond %{HTTP_HOST} ^domain1.ca$ [OR]
RewriteCond %{HTTP_HOST} ^www.domain1.ca$
RewriteRule ^(/folder2/)(.*)$ "https://domain3.ca/$1" [R=301,L]
 

Любая помощь будет очень признательна 🙂 Thx.

Ответ №1:

Пара проблем с вашими существующими правилами:

  • В .htaccess URL-адресе путь, соответствующий RewriteRule шаблону, не начинается с косой черты. Итак, URL-путь начинается folder1/xyz , а не /folder1/xyz .
  • Вы излишне захватываете «папку 1» в первом заключенном в скобки подшаблоне и используете ее в строке подстановки (т. Е. $1 ). Вы должны использовать $2 или не захватывать первый сегмент пути.

Директивы также можно было бы немного привести в порядок (например. нет необходимости в обратной косой черте-в регулярном выражении отсутствуют косые черты, и условия могут быть объединены).

Вместо этого попробуйте выполнить следующее:

 RewriteCond %{HTTP_HOST} ^(www.)?domain1.ca [NC]
RewriteRule ^folder1/(.*) https://domain2.ca/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^(www.)?domain1.ca [NC]
RewriteRule ^folder2/(.*) https://domain3.ca/$1 [R=301,L]
 

Дополнительные примечания:

  • Привязка конца строки ( $ ), следующая (.*)$ в RewriteRule шаблоне, не требуется, так как регулярное выражение по умолчанию является жадным.
  • Вам нужно только заключить аргумент в двойные кавычки, если он содержит пробелы.
  • Я удалил привязку конца строки ( $ ) с конца шаблона, чтобы также соответствовать полным доменным именам, которые заканчиваются точкой.
  • Я добавил NC флаг в условие. Технически возможно, что некоторые боты могут отправлять смешанный/верхний регистр Host заголовка.

Сначала протестируйте 302 (временных) перенаправления, чтобы избежать потенциальных проблем с кэшированием.

Комментарии:

1. Спасибо @MrWhite… работает отлично. И я ценю дополнительные примечания.