Лучший способ перенаправления/перезагрузки страниц в PHP
Каков наилучший способ перезагрузить/перенаправить страницу на PHP, которая полностью удаляет всю историю/кеш? Какие заголовки я должен использовать?
Что происходит:
При нажатии ссылки устанавливаются параметры get-parameters и выполняется script. Когда закончите, я хочу перенаправить и перезагрузить страницу без параметров get. Сначала кажется, что ничего не произошло, но при нажатии F5 появляются изменения.
Что я хочу:
Перенаправить и перезагрузить, чтобы изменения отображались без нажатия F5.
Ответы
Ответ 1
header('Location: http://www.example.com/', true, 302);
exit;
Ссылка: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
изменить:
Этот ответ может быть только кэшируемым, если указывается Cache-Control или Истекает заголовок поля.
Ответ 2
function redirect($url) {
if(!headers_sent()) {
//If headers not sent yet... then do php redirect
header('Location: '.$url);
exit;
} else {
//If headers are sent... do javascript redirect... if javascript disabled, do html redirect.
echo '<script type="text/javascript">';
echo 'window.location.href="'.$url.'";';
echo '</script>';
echo '<noscript>';
echo '<meta http-equiv="refresh" content="0;url='.$url.'" />';
echo '</noscript>';
exit;
}
}
// How to use
$url = "www.google.com";
redirect($url);
Ответ 3
Лучший способ перезагрузить страницу и заставить ее не извлекать из кеша - это добавить случайный идентификатор или временную метку в конец URL-адреса в качестве запроса. Это делает запрос уникальным каждый раз.
Ответ 4
Попробуйте следующее:
echo '<script>document.location.replace("someurl.php");</script>';
Это должно заменить историю браузера, но не кеш.
Ответ 5
header('Location: http://example.com/path/to/file');
Ответ 6
только для информации, связанной с SEO:
301 скажет поисковой системе заменить url в своем индексе. поэтому, если url1 перенаправляется на url2 с 301, вся основная поисковая система [google, yahoo + bing] заменит url1 на url2.
302 работает по-разному. Он говорит, что URL-адрес расположен temporarily
в другом адресе.
см. этот пост
Ответ 7
Самый безопасный способ - использовать перенаправление заголовка
header('Location: http://www.example.com/', true, 302);
exit;
Но будьте осторожны, что он должен быть отправлен до того, как любой другой вывод будет отправлен в браузер.