Обрабатывать данные ДО 301 Редирект? - PullRequest
0 голосов
/ 02 июня 2010

Итак, я работаю над сокращением ссылок PHP (я знаю, что нужно миру). Обычно, когда страница загружается, php определяет, куда ей нужно перейти, и отправляет заголовок 301 для перенаправления браузера, например, так ...

Header( "HTTP/1.1 301 Moved Permanently" );
header("Location: http://newsite.com";

Теперь я пытаюсь добавить отслеживание в мои перенаправления и вставить некоторые пользовательские аналитические данные в таблицу MySQL до того, как произойдет перенаправление. Это прекрасно работает, если я не указываю тип перенаправления и просто использую:

header("Location: http://newsite.com";

Но, разумеется, как только вы добавите заголовок 301, ничего больше не будет обработано. На самом деле, при первом запросе он отправляет данные в MySQL, но при любых последующих запросах связь с базой данных отсутствует.

Я предполагаю, что это проблема с кэшированием в браузере, когда он увидит 301, он решает, что у него нет причин анализировать что-либо в будущих запросах. Но кто-нибудь знает, есть ли способ обойти это?

Мне бы очень хотелось сохранить его как 301 для целей SEO (думаю, если вы не укажете, он отправляет 404 по умолчанию?).

Я думал об использовании .htaccess для добавления файла на страницу, которая будет выполнять работу MySQL, но с 301, не будет ли это просто игнорироваться?

В любом случае, я не уверен, есть ли какое-либо решение, кроме использования перенаправления другого типа, но я готов сдаться только сейчас. Таким образом, любые предложения будут высоко оценены. Спасибо!

Ответы [ 3 ]

2 голосов
/ 02 июня 2010

Попробуйте добавить следующее перед первым оператором заголовка; это должно предотвратить кэширование на типичных страницах, но я не уверен, работает ли оно для перенаправлений:

header("Cache-Control: no-cache, must-revalidate");
header("Expires: Thu, 1 Jan 1970 00:00:00 GMT");
0 голосов
/ 02 июня 2010

Вы должны использовать перенаправление по умолчанию 302. Это временное перенаправление, которое не будет кэшироваться.

301 - это постоянное перенаправление, и большинство браузеров будет его кэшировать.

0 голосов
/ 02 июня 2010

Объяснение приведено в описании кода 301: «Перемещено Постоянно ». Вы специально говорите браузеру, что новая страница - это постоянное новое местоположение, и поэтому нет никаких оснований для этого когда-либо зайдите на старый URL снова.

Вместо этого используйте 303 См. Другой статус. Это имеет примерно то же значение (в том смысле, что оно перенаправляет посетителя в другое место), но его «нельзя» кэшировать.

...