Вывод, который вы видите (с косой чертой в URL-пути), является результатом не только опубликованных вами директив, поэтому, возможно, у вас конфликт с другими директивами или вы видите кешированный ответ.
Однако опубликованное вами правило может показаться намного более сложным, чем необходимо.
1. https://example1.com/pwreset.php?key=cdc3b1aa842785f7345be501a30ddc83
2. https://example2.com/support/pwreset.php?key=cdc3b1aa842785f7345be501a30ddc83
Предположения:
- Вам не нужно совпадать со значением
key
; просто URL-путь (т.е. /pwreset.php
)
example1.com
и example2.com
указывают на разные места (файловая система не перекрывается).
Чтобы перенаправить с 1.
на 2.
, попробуйте следующее в верхней части файла .htaccess
в корне example1.com
:
RewriteEngine On
RewriteRule ^pwreset\.php$ https://example2.com/support%{REQUEST_URI} [R=302,L]
Любая строка запроса (например, key=abc...
) передается без изменений.
Обратите внимание, что это 302 (временное) перенаправление. Измените его на 301 (постоянный), только если вы подтвердили, что он работает нормально.
Если вам нужно проверить, что параметр URL key=
присутствует и имеет значение 32 шестнадцатеричной строки (что, по-видимому, соответствует вашему примеру), то включите условие перед RewriteRule
, которое проверяет соответствие QUERY_STRING
переменная сервера. Например:
RewriteCond %{QUERY_STRING} ^key=[0-9a-f]{32}$
RewriteRule ^pwreset\.php$ https://example2.com/support%{REQUEST_URI} [R=302,L]
Если в запросе присутствуют другие параметры URL, перенаправление не будет выполнено.
За исключением:
RewriteRule ^(.+?)/$ https\:\/\/www\.example\.com\/support\/pwreset\.php [L]
Это выглядит очень в стиле cPanel. В аргументе RewriteRule
susbtitution нет необходимости использовать обратную косую черту, косую черту и точки. Это «обычная» строка, а не регулярное выражение. Эти символы не имеют особого значения здесь.