У меня есть page1.php
с этим кодом:
<form action="/redirect.php" method="POST" target="_blank"> <input name="destination" type="hidden" value="a"/> <input type="submit" value="Click here"></form>
и это redirect.php
:
<?php $url = "http://www.default.com"; if(isset($_POST['destination'])){ switch ($_POST['destination']) { case "a": $url = "http://www.domain1.com"; break; case "b": $url = "http://www.domain2.com"; break; default: $url = "http://www.default.com"; } } header( "refresh:1;url=$url" ); ?> <!doctype html> <html> <head> </head> <body> <div>Redirecting, Please wait</div> </body> </html>
Я создал страницу перенаправления таким образом, потому что для меня важно, чтобы она загружала и отображала определенный контент, а не перенаправляла сразу (и, следовательно, выдает код 200, а не код 302).
Однако только в Chrome и Safari заголовки перенаправления содержат информацию о domain1.com
, который является redirect.php
, и, таким образом, например, владелец domain1.com
будет знать, что посетитель пришел из mydomain.com/redirect.php
.
Но в IE и FF реферер в заголовках имеет значение null. Что вызывает это различное поведение и как я могу его исправить, чтобы они несли одну и ту же информацию о реферере?
Вы можете попробовать:
header("Location: ".$url."");
Рабочий пример (проверено на FF 27.0.1):
Файл page1.php
:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Starting page</title> </head> <body> <form action="redirect.php" method="post"> <input type="hidden" name="destination" value="a"> <input type="submit" value="Click here"> </form> </body> </html>
Файл redirect.php
:
<?php $url = "http://www.default.com"; if(isset($_POST['destination'])){ switch ($_POST['destination']) { case "a": $url = "http://www.domain.com"; break; case "b": $url = "http://www.examples.com"; break; default: $url = "http://www.example.com"; } } ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Landing page</title> </head> <body> <div>Redirecting, Please wait</div> <script> window.onload = function() { setTimeout(function(){ window.location = '<?php echo $url;?>'; }, 4000); }; </script> </body> </html>
Как это работает: после нажатия кнопки Click here
на page1.php
, отправленные данные отправляются и выбирается домен http://www.domain.com
. С помощью javascript через 4 секунды после загрузки окна браузер перенаправит пользователя на http://www.domain.com
. Я смотрел заголовки рефери в Firebug
и они были отправлены.
Смущенный. Перенаправление и обновление страницы не одинаково. И еще – не все браузеры поддерживают обновление заголовка.