Вместо создания ваших начальных URL-адресов, таких как domain1.com/index.php?domain2.com?page.html
- что требует, чтобы вы захватили две отдельные обратные ссылки (вторая ?
будет закодирована в URL). Было бы лучше отформатировать ваш URL более условно, как показано ниже:
domain1.com.com/index.php?redirect=domain2.com/page.html
(Не уверен, почему вы подставили ?
для первой косой черты в передаваемом URL?)
Тогда вы могли бы сделать что-то вроде следующего. Обратите внимание, что вам нужно использовать условие, которое проверяет серверную переменную QUERY_STRING
.
RewriteCond %{QUERY_STRING} ^redirect=([^&]+)
RewriteRule ^index\.php$ http://%1 [QSD,R,L]
%1
- это обратная ссылка на последний соответствующий CondPattern .
Флаг QSD
необходим для удаления исходной строки запроса из запроса.
ОДНАКО вам необходимо выполнить дополнительную проверку доменов, на которые можно перенаправить, иначе это может быть использовано со злым умыслом после его обнаружения.
UPDATE:
RewriteCond %{HTTP_HOST} ^
RewriteRule (.+)\/(.+) http://$1/$2 [R=301,L]
Директива RewriteCond
здесь ничего не делает. Если вы хотите проверить наличие заголовка Host
(т.е. это не запрос HTTP / 1.0), вам следует изменить регулярное выражение ^
на .
(просто точка). Однако, если вы находитесь на общем сервере, этот тест, вероятно, является излишним.
При использовании URl-path это «сломается», если имя хоста назначения совпадает с исходным.