2010-06-02 6 views
0

Ainsi, j'ai travaillé sur un raccourcisseur de lien de PHP (je sais, juste ce dont le monde a besoin). Fondamentalement, quand la page se charge, php détermine où il doit aller et envoie un 301 en-tête pour rediriger le navigateur, comme si ...Données de processus AVANT une redirection 301?

Maintenant, je suis en train d'ajouter un peu de suivi à mes réoriente et insert des données analytiques personnalisées dans une table MySQL avant la redirection. Il fonctionne parfaitement si je ne spécifie pas le type de redirection et juste utiliser:

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

Mais, bien sûr, dès que vous ajoutez dans l'en-tête 301, rien d'autre obtient traité. En fait, à la première requête, il envoie les données à MySQL, mais sur les requêtes suivantes il n'y a pas de communication avec la base de données.

Je suppose que c'est un problème de mise en cache du navigateur, une fois qu'il est vu le 301, il décide qu'ils n'ont aucune raison d'analyser quoi que ce soit sur les futures demandes. Mais, est-ce que quelqu'un sait s'il y a moyen de contourner cela?

Je voudrais vraiment le garder comme un 301 à des fins de référencement (je crois que si vous ne spécifiez pas il envoie un 404 par défaut?).

J'ai pensé à utiliser .htaccess pour ajouter un fichier à la page qui fera le travail de MySQL, mais avec le 301, cela ne serait-il pas aussi ignoré?

De toute façon, je ne suis pas sûr s'il y a une autre solution que d'utiliser un type différent de redirection, mais je suis prêt à abandonner pour le moment. Donc, toutes les suggestions seraient très appréciées. Merci!

Répondre

2

Essayez d'ajouter ce qui suit avant la première instruction d'en-tête; cela devrait empêcher la mise en cache dans les pages typiques, mais je ne suis pas sûr si cela fonctionne pour les redirections:

header("Cache-Control: no-cache, must-revalidate"); 
header("Expires: Thu, 1 Jan 1970 00:00:00 GMT"); 
+0

La RFC 2616 indique que "cette réponse peut être mise en cache sauf indication contraire", cela fonctionnera probablement. – Artefacto

+0

Cela fonctionne parfait merci! – Jesse

0

L'explication est dans la description du code 301: « déplacé de façon permanente » Vous dites spécifiquement la navigateur que la nouvelle page est un nouvel emplacement permanent, et donc il n'y a aucune raison pour qu'il revienne jamais à l'ancienne URL.

Au lieu de cela, utilisez un 303 Voir Autre statut. Cela a à peu près le même sens (en ce sens qu'il redirige le visiteur ailleurs), mais il "ne doit pas" être mis en cache.

0

Vous devez utiliser la redirection 302 par défaut, qui est une redirection temporaire et ne sera pas mise en cache.

301 est la redirection permanente et la plupart des navigateurs le mettent en cache.