Лучший способ перенаправления/перезагрузки страниц в 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;

Но будьте осторожны, что он должен быть отправлен до того, как любой другой вывод будет отправлен в браузер.