Перенаправить все запросы GET с одного сайта на другой - PullRequest
4 голосов
/ 19 февраля 2012

Предположим, я хочу перенаправить все GET запросы с одного сайта на другой, используя PHP.
POST запросов не существует в системе.

Например, когда пользователь подключается к

www.mysite.com/index.php?action=myAction&pageno=2

Я хочу, чтобы он был перенаправлен на:

www.mySecondSite.com/index.php?action=myAction&pageno=2

Я могу написать жесткий код для каждой возможной переменной $_GET (myAction и pageno в моем примере), но это не похоже на разумное решение. Кроме того, я видел это решение, которое включает изменение конфигурации сервера Apache. Предположим, я не могу изменить конфигурацию сервера.

Конечно, должен быть способ получить все переменные и их значения и перенаправить их на другой сайт.

Ответы [ 3 ]

4 голосов
/ 19 февраля 2012

Прежде всего вам необходимо получить полный URL, например, для моего локального сервера:

http://localhost/server_var.php?foo=bar&second=something

Попробуйте напечатать $_SERVER переменную с print_r():

print_r( $_SERVER);

Youдолжен получить такой результат:

Array
(
    ...
    [REQUEST_URI] => /server_var.php?foo=bar&second=something
    ...
)

Для получения дополнительной информации взгляните на страницу руководства , так что теперь у вас есть ваш URL:

$url = 'http://www.mySecondSite.com' . $_SERVER['REQUEST_URI'];

И вы можетеиспользуйте header() для перенаправления вашего запроса:

header( 'Location: ' . $url);

Я рекомендую взглянуть на коды состояния HTTP , 3xx, независимо от того, хотите ли вы использовать 302 Found (по умолчанию) или 307 Temporary Redirect ...

Второй особый случай - заголовок «Location:».Он не только отправляет этот заголовок обратно в браузер, но также возвращает код состояния REDIRECT (302) в браузер, если код состояния 201 или 3xx уже был установлен.

можно сделать это:

header('HTTP/1.0 307 Temporary Redirect');
header( 'Location: ' . $url);
4 голосов
/ 19 февраля 2012

Напишите этот php-код в верхней части страницы index.php перед тегом html.

<?
$newUrl = "www.mySecondSite.com/index.php";
if (!empty($_GET)){
$parameter = $_GET;
$firstTime = true;
foreach($parameter as $param => $value){
    if ($firstTime) {
        $newUrl .= "?" . $param . "=" . $value;
        $firstTime = false;
    } else {
        $newUrl .= "&" . $param . "=" . $value;
    }
}
}
header("Location: ".$newUrl);
/* Make sure that code below does not get executed when we redirect. */
exit;
?>
2 голосов
/ 19 февраля 2012

Перенаправление в .htaccess было бы правильным способом, но если вы говорите, что не можете изменить его, вы можете вставить в файл index.php условный заголовок с кодом 301: http://php.net/manual/en/function.header.php

У вас есть содержимое строки запроса, доступное в $_SERVER['QUERY_STRING']

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...