web-dev-qa-db-fra.com

PHP redirection d'en-tête 301 - quelles sont les implications?

J'ai domain.com. Si l'utilisateur est connecté, il devrait se charger automatiquement domain.com/option-X où X est un choix prédéfini de l'utilisateur.

Donc, je fais cela en haut de index.php:

header("Location: /option-X"); 

Mais, si l'utilisateur n'est pas connecté, je choisis simplement automatiquement la première option comme celle-ci:

header("HTTP/1.1 301 Moved Permanently"); 
header("Location: /option-a"); 

Donc, j'ai deux questions concernant les implications de le faire:

  1. Étant donné que les robots des moteurs de recherche ne seront pas connectés, ils obtiendront toujours domain.com/option-a - cela leur affecte-t-il qu'il a un en-tête 301?
  2. Quelle pourrait être la charge du processeur du serveur pour effectuer ces redirections? Je ne sais pas comment en faire un test. Le site actuel (qui n'a pas de redirection) a environ 100 000 visites quotidiennes.
44
Andres SK

L'effet du 301 serait que les moteurs de recherche indexeront/option-a au lieu de/option-x. Ce qui est probablement une bonne chose car/option-x n'est pas accessible pour l'index de recherche et pourrait donc avoir un effet positif sur l'index. Seulement si vous l'utilisez à bon escient ;-)

Après la redirection, mettez exit (); pour arrêter le reste du script à exécuter

header("HTTP/1.1 301 Moved Permanently"); 
header("Location: /option-a"); 
exit();
90
Roel Veldhuizen

C'est mieux:

<?php
//* Permanently redirect page
header("Location: new_page.php",TRUE,301);
?>

Un seul appel, y compris le code 301. Notez également le chemin d'accès relatif au fichier dans le même répertoire (pas "/dir/dir/new_page.php", etc.), que tous les navigateurs modernes semblent prendre en charge.

Je pense que cela est valable depuis PHP 5.1.2, peut-être plus tôt.

28
Gary Samad

Juste un conseil: utiliser http_response_code est beaucoup plus facile à retenir que d'écrire l'en-tête complet:

http_response_code(301);
header('Location: /option-a'); 
exit;
6
the_nuts

Les moteurs de recherche comme 301 redirigent mieux qu'un 404 ou un autre type de redirection côté client, pas de soucis.

L'utilisation du processeur sera minime, si vous voulez enregistrer encore plus de cycles, vous pouvez essayer de gérer la redirection dans Apache en utilisant htaccess, alors php n'aura même pas à s'impliquer. Si vous souhaitez charger le test d'un serveur, vous pouvez utiliser ab fourni avec Apache, ou httperf si vous recherchez un outil de test plus robuste.

4
profitphp

Assurez-vous que die() après votre redirection, et assurez-vous de faire votre redirection LE PLUS TÔT POSSIBLE pendant l'exécution de votre script. Il s'assure qu'aucune autre requête de base de données (le cas échéant) n'est gaspillée pour rien. C'est le seul conseil que je peux vous donner

Pour les moteurs de recherche, 301 est le meilleur code de réponse

3
genesis