.htaccess Перенаправление на внешний сайт и перенаправление данных POST при изменении адресной строки? - PullRequest
1 голос
/ 14 октября 2009

Эй, я хочу использовать .htaccess, чтобы перенаправить запрошенную страницу на ту же самую страницу в другом домене, и я хочу, чтобы она перенаправляла все данные POST при ИЗМЕНЕНИИ адресной строки в новый домен, как при обычном перенаправлении.

Вот мой код.

Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) http://www.domain1.com/$1 [R=301,L] 

Проблема в том, что данные POST не отправляются таким образом. Затем я попробовал это:

Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) http://www.domain1.com/$1 [R=301,P]

И это работает для пересылки данных POST, однако адресная строка не меняется на новый domain1.com

Как мне это сделать?

Спасибо!

Ответы [ 2 ]

1 голос
/ 14 октября 2009

К сожалению, протокол HTTP не поддерживает это.

При выполнении вашего первого примера веб-сервер отправляет запрашивающему браузеру заголовок «Location», сообщающий браузеру перейти на указанный URL. Браузер пытается загрузить этот новый URL-адрес, как обычную веб-страницу, включая отображение URL-адреса в адресной строке браузера.

Поскольку браузер - это система, загружающая новый URL, браузер должен быть системой, чтобы повторно отправить отправленные данные. Веб-сервер не может этого сделать. К сожалению, протокол HTTP не позволяет веб-серверу указывать браузеру предварительно выполнить повторное размещение.

Есть ли альтернативный способ достижения вашей цели?

0 голосов
/ 14 октября 2009

Я думаю, что это невозможно, поскольку для изменения URL-адреса в браузере HTTP-сервер должен вернуть некоторый ответ, который сообщит браузеру отправлять данные POST на новый URL-адрес. Что, насколько я знаю, невозможно без использования JavaScript. Когда вы указали опцию [P], HTTP-сервер работает как прокси-сервер, скрывая реальный источник данных от браузера. Я вижу 2 возможных решения:

  • используйте GET вместо POST
  • или создайте какой-нибудь скрипт, который будет работать на HTTP-сервере и сделать перенаправления POST

UPD: Вы можете создать скрипт PHP, который будет обработчиком для ваших правил перенаправления. Сценарий должен создать следующий HTML-код:

<body onload="document.forms[0].submit()">
<form action="post" action="<?=$your_new_url_here>">
<?php
    foreach ($_POST as $param => $value):
?>
<input type="hidden" 
    name="<?=htmlspecialchars($param)?>" 
    value="<?=htmlspecialchars($value)?>" />
<?php
    endforeach;
?>
</form>
</body>
...