2009-10-15 2 views
10

Каков наилучший способ перезагрузить/перенаправить страницу на PHP, которая полностью удаляет всю историю/кеш? Какие заголовки я должен использовать?лучший способ перенаправления/перезагрузки страниц в PHP

Что происходит:

При нажатии на ссылку, получить-параметров устанавливается и выполняется скрипт. Когда закончите, я хочу перенаправить и перезагрузить страницу без параметров get. Сначала кажется, что ничего не произошло, но при нажатии F5 появляются изменения.

Что я хочу:

Перенаправление и перезагрузить, чтобы изменения появляются без нажатия клавиши F5.

+0

Вы должны быть более конкретным. На какой странице вы не хотите появляться в истории? Тот, с которым вы звоните, или тот, на который вы перенаправляетесь? То же самое касается кэша. –

ответ

3

Попробуйте это:

echo '<script>document.location.replace("someurl.php");</script>'; 

Это должно заменить историю браузера, но не кэш.

7

Лучший способ перезагрузить страницу и заставить ее не извлекать из кеша - это добавить случайный идентификатор или временную метку в конец URL-адреса в качестве строки запроса. Это делает запрос уникальным каждый раз.

+0

Это может быть лучший способ, странно это делать. Представьте себе: www.google.com.br?randomId=12381289371 Лучший способ - отправить присланные заголовки. – Ismael

26
header('Location: http://www.example.com/', true, 302); 
exit; 

Ref: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

редактировать:

Этот ответ только кэшируемым если обозначено Cache-Control или Истекает поле заголовка.

+1

302 является правильным. Поздравления. – Cesar

+0

Это именно то, что мне было нужно, я делал что-то совершенно другое в этом вопросе, но ответ сработал отлично :) – Jake

+0

лучше использовать: header («Cache-Control: no-cache»); header ('Местоположение: http: //www.example.com/', true, 302); выход; –

0

Самый безопасный способ заключается в использовании заголовка Redirect

header('Location: http://www.example.com/', true, 302); 
exit; 

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

24
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); 
+0

Спасибо @Phill за этот ответ. Вы сохранили мне много времени с этой функцией. –

+0

Hm. Я считаю, что кодер должен решить, какой тип перенаправлять он хочет использовать в данной ситуации, а не полагаться на функцию, которую он должен выбрать. Например. если вы хотите HTTP-запрос через 'location', то вы должны убедиться, что заголовки еще не отправлены, вместо того, чтобы использовать резервные копии, если бы они были. Вот как я думаю, по крайней мере – Kos

1

только для информации, связанной с SEO:

301 сказал бы поисковик, чтобы заменить URL в их индексе. поэтому, если url1 перенаправляется на url2 с 301, вся основная поисковая система [google, yahoo + bing] заменит url1 на url2.

302 работает по-разному. Он говорит, что url находится temporarily в другом адресе.

see this post