#.htaccess #mod-rewrite #url-rewriting
Вопрос:
Я надеюсь получить помощь для выполнения следующей задачи:
Я хочу перенаправить домен с помощью htaccess только тогда, когда index.php вызывается и при задании специального параметра. Допустим, у меня есть следующий URL-адрес
https://www.my-domain.com/index.php?action=status-checkamp;licence=80586f63amp;product=RFDEamp;domain=domain.tld
Когда этот URL вызывается и параметр action
существует, он должен быть перенаправлен на
https://www.other-domain.com/index.php?action=status-checkamp;licence=80586f63amp;product=RFDEamp;domain=domain.tld
Если бы только
https://www.my-domain.com/index.php?parm=4711
или
https://www.my-domain.com/index.php
вызывается или любой другой URL-адрес в этом домене , но без параметра action
ничего не должно происходить.
Может ли кто-нибудь помочь мне найти правильное условие и правило?!
Спасибо!
Ответ №1:
Вы можете сделать что-то вроде следующего в верхней части вашего корневого .htaccess
файла:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www.)my-domain.com
RewriteCond %{QUERY_STRING} (^|amp;)action=
RewriteRule ^index.php$ https://www.other-domain.com/$0 [R=302,L]
Это перенаправляет www.my-domain.com/index.php
(с поддоменом www или без него), когда параметр action
URL существует в любом месте строки запроса (хотя в вашем примере это показано только в начале строки запроса?). URL-путь и строка запроса сохраняются в перенаправлении на www.other-domain.com
. Параметр action
URL может иметь любое значение.
$0
Обратная ссылка содержит все совпадение RewriteRule
шаблона, т. е. index.php
об успешном выполнении. Исходная строка запроса передается по умолчанию — здесь нет ничего лишнего, что вам нужно сделать, чтобы перенаправить на ту же строку запроса.
Если www.other-domain.com
он находится на другом сервере и никакие другие домены не могут конфликтовать на исходном хосте, то, возможно, вы могли бы удалить первое условие, которое проверяет переменную HTTP_HOST
сервера.
Комментарии:
1. Ты потрясающий @MrWhite. Это именно то, что я искал. Я не знал параметра $0, который решает мою проблему. Большое вам спасибо, что нашли время и ответили на мой вопрос!