Добрый день.
Вот не так давно столкнулся с одной фичей 301 редиректа если честно я несколько часов не мог понять в чем прикол а потом все добрый дядя Google дал мне ответ.
С чего все началось.
Ко мне написал старый заказчик с просьбой поправить страницу заказа. А именно перекидать пользователя без авторизации на страницу самой авторизации (зачем ? это уже другая история скажу сразу у него движок не Opencart а самопис какой то).
Тут долго думать не пришлось 3 строчки кода (Буду приводить код Opencart что бы было более понятно)
Ну вставил я этот код:
if(!$this->customer->isLogged()){
$this->response->redirect($this->url->link('account/login'));
}
Ну думаю проверю на всякий случай. И вот скидаю куки и захожу на страницу заказа оп и все работает.)))) Думаю ладно попробую еще авторизацию пройти.
Логинюсь на сайте - идем на страницу оформления - оп и я на странице авторизации с ошибкой доступа
Я немножко афигел. Давай копать проврил код все нормально все верно. Убрал код из файла и оп ляля а Ридерект остался причем в любой ситуации перекидивает.
Я начал колдовать искал убирал скидивал кеш и нифига.
И тут я заглянул в файл редиректа и вот какую строчку я там обнаружил
header("HTTP/1.1 301 Moved Permanently");
Уточнил у заказчика откуда он там взялся (пришлось обяснить сначала что он значит и делает). Как оказалось им какая то СЕО прога сказала что на сайте есть 302 редиректы и это не правильно и они решили все перевести в 301.
Думаю окей ваши тараканы.
Закомментил эту строчку проблема осталась.
Начал гуглить, гуглить, гуглить, ...........
И на дном из тикетов поддержки Google Chrome я нашел ОТВЕТ: Как оказалось браузеры кешируют 301 редирект и при повторном вызове УРЛ сразуже перенаправлять на кешированный УРЛ.
Причем не только Google Chrome а и другие браузеры также.
Итоги:
Для внутришних редеректов сайта всегда используйте 302 редирект который используется в PHP по умолчанию.