Итак, я работал над сокращением ссылок на 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, не будет ли это просто проигнорировано?
В любом случае, я не уверен, есть ли какое-либо решение, кроме использования другого типа перенаправления, но я готов отказаться от него. Таким образом, любые предложения будут высоко оценены. Спасибо!
Попробуйте добавить следующее перед первым заголовком; это должно предотвратить кэширование на типичных страницах, но я не уверен, работает ли он для перенаправления:
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Thu, 1 Jan 1970 00:00:00 GMT");
Вы должны использовать перенаправление по умолчанию 302, которое является временным перенаправлением и не будет кэшироваться.
301 - постоянная переадресация, и большинство браузеров кэширует ее.
Объяснение приведено в описании кода 301: "Перемещено Постоянно". Вы специально сообщаете браузеру, что новая страница является постоянным новым местоположением, и поэтому нет причин для этого снова посетите старый URL.
Вместо этого используйте статус 303 См. другой. Это примерно такое же значение (в том, что оно перенаправляет посетителя в другое место), но "не должно" кэшироваться.