URL-адрес перенаправления htaccess с параметром, если существует специальный параметр

#.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, который решает мою проблему. Большое вам спасибо, что нашли время и ответили на мой вопрос!