У меня есть 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 и они были отправлены.
Смущенный. Перенаправление и обновление страницы не одинаково. И еще – не все браузеры поддерживают обновление заголовка.