#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… работает отлично. И я ценю дополнительные примечания.