Please enable JavaScript!
Bitte aktiviere JavaScript!
S'il vous plaît activer JavaScript!
Por favor,activa el JavaScript!
antiblock.org

 

Redirtection permanente

Redirection permanenteCet article décrit la façon de bien rediriger une page web en utilisant un code d'état HTTP 301 et l'en-tête de Location. Le code de statut 301 est utilisé pour indiquer qu'une page a été déplacée de façon permanente. De multiples techniques sont présentés avec des recommandations.

Dans le but de rediriger une page Web vers un autre emplacement, de renvoyer le code d'état HTTP 301 et un en-tête de Location dans la réponse HTTP que la page Web est obsolète. Le code de réponse HTTP 301 informe les utilisateurs dont les robots des moteurs de recherche que l'emplacement a été déplacé de façon permanente. Ceci est particulièrement utile pour les moteurs de recherche comme Google, qui porteront sur ??la page rank de la page nouvelle si ce code d'état est vu. Si vous n'avez pas besoin d'indiquer le déplacement permanent, vous pouvez accomplir la redirection en fixant un en-tête Location en PHP ou en utilisant Response.Redirect en ASP. Le lieu d'en-tête fait la redirection réelle vers le nouvel et peut être utilisé par lui-même.

Les en-têtes HTTP sont envoyés pour chaque page web . Pour les utilisateurs avancés, je vous recommande de télécharger le navigateur web Firefox  et d'installer l'extension  Web Developer Extensions . Ensuite, utilisez la dans: information> Afficher fonctions en-têtes de réponse. Dans les scripts, les en-têtes HTTP doivent être envoyés avant d'envoyer tout contenu de page, y compris un espace blanc, ou bien une erreur va se produire.

Redirection HTTP 301 en ASP-VBScript


<%@ Language=VBScript %>  
<%  
' Permanent redirection  
Response.Status = "301 Moved Permanently"  
Response.AddHeader "Location", "http://www.dreamer.weboptime.com/"  
Response.End 
%>
    
 

Dans Active Server Pages (ASP), Response.Redirect ne fonctionne pas le même que le code que vous voyez dans l'exemple. Response.Redirect fixera la tête d'emplacement comme le montre, mais il donnera le code de statut à HTTP/1.1 302 Objet déplacé à sa place . Lorsque vous définissez l'en-tête Location avecResponse.AddHeader , le code de statut doit être défini manuellement, sinon il reste 200 OK .

Si vous envoyez un contenu de la page avant les en-têtes, vous obtiendrez une erreur comme, "Erreur d'objet Response 'ASP 0156: 80004005»; erreur d'en-tête; Les en-têtes HTTP sont déjà écrites dans le navigateur du client. Toute modification d'en-tête HTTP doit être faite avant d'écrire le contenu des pages.  Normalement, vous ne voyez pas cette erreur, même si il est contenu avant la redirection, parce que la page mise en mémoire tampon est activée par défaut dans IIS. Si vous voulez être sûr qu'il n'y a pas de contenu envoyé avant la redirection, appelez Response.Flush juste avant, désactiver tampon page avec Response.Buffer = False , ou configurez IIS pour désactiver tampon page. (Désactivation de mise en mémoire tampon réduit les performances.)

Redirection HTTP 301 en PHP

   
<?php  
// Permanent redirection  header("HTTP/1.1 301 Moved Permanently");  
header("Location: http://www.dreamer.weboptime.com/");  
exit();  
?>

Si vous définissez l'en-tête Localisation par lui-même, PHP définit automatiquement le code d'état à HTTP/1.1 302 Found .

Remarque, si vous tentez d'envoyer des entêtes après que le contenu ait été envoyé, vous recevrez un avertissement comme, "Attention: Impossible de modifier les informations d'en-tête - headers already sent by ..." . Méfiez-vous des lignes vides et les espaces entre les balises PHP qui s'ouvrent et se ferment. ASP ignore ceux-ci, mais PHP ne fonctionne pas avec.

Redirection HTTP 301 dans ColdFusion

<CFHEADER Statuscode="301" Permanently"> statustext="Moved  
<CFHEADER Name="Location" value="http://www.dreamer.weboptime.com/">

Ne pas utiliser une commande CFFLUSH  avant les balises ci-dessus, ou en Application.cfm . Ce code a été fourni par Coldfusion Forwarding.com Toll Free .

Redirection HTTP 301 en Perl

   
#!/usr/bin/perl      -w  
use strict;  
print "Status: 301 Moved Permanently\n";  
print "Location: http://somewhere/page.htm\n\n";  
exit;

Comme en PHP, si vous ne fournissez pas le code 301 explicitement, Apache va envoyer un code d'état "302 Found". Notez la différence subtile par rapport à PHP. Cet exemple affiche un "statut" en-tête plutôt que d'une ligne de code d'état HTTP. C'est parce que vous ne pouvez pas régler le code d'état HTTP directement en tant que vous le pouvez généralement en PHP. Si vous le faites, le serveur renverra une erreur 500 Internal Server, et le journal d'erreur s'affiche:

malformed header from script. Bad header=HTTP/1.1 301 Moved Permanently: /cgi/test.pl

 

Le "statut" en-tête est une autre façon de mettre le code d'état HTTP. Ce n'est pas passé au navigateur directement, mais au serveur web (Apache), il se transforme en un code d'état HTTP approprié. (La spécification CGI ne permet pas de fixer directement le code d'état HTTP. Perl s'exécute généralement en tant que CGI, alors que PHP ne fonctionne pas.

Vous devez fournir le carraige retourne comme indiqué ci-dessus. Deux retours chariot (\ n \ n) sont nécessaires après l'en-tête dernière, car ils signifient la fin de l'en-tête HTTP et le début du contenu.

Comme en PHP, il est de bonne pratique de terminer le script de façon explicite, sinon, le script Perl continue l'exécution. Il ne devrait pas y avoir de print "Content-Type: text / html \ n \ n"; ou toute autre sortie avant d'imprimer ces en-têtes, ou les en-têtes seront imprimés dans le cadre du contenu visible dans le navigateur.

Redirection avec le mod_rewrite

Le module Apache, mod_rewrite , est généralement utilisé pour transformer les URL d'une forme à une autre. Il peut également être utilisé pour la redirection permanente. Les règles de réécriture peuvent être placées dans le fichier httpd.conf (pour le serveur à l'échelle des règles), ou dans les fichiers .htaccess (pour le répertoire des règles spécifiques). Prenons l'exemple suivant qui se trouve dans ce fichier .htaccess:

RewriteEngine on  
RewriteRule ^ contact \. php $ http://www.dreamer.weboptime.com/p2.php [R = permanent, L]

Redirection permanente avec htaccessLa première ligne indique à Apache de faire tourner le moteur sur mod_rewrite. La deuxième ligne indique à mod_rewrite faire correspondre les demandes où l'URI est exactement contact.php . ^ Et $ correspondent au début et à la fin de l'expression, respectivement, et le \ est utilisé pour échapper à la période, qui, autrement, serait n'importe quel caractère. Après le motif de correspondance est un espace, puis la substitution. Dans ce cas, je veux que le serveur se redirige vers  contact.php à http://www.dreamer.weboptime.com/p2.php .

Les chiffres entre parenthèses sont les drapeaux de règles séparées par des virgules. La R = permanent drapeau indique à Apache de délivrer une redirection permanente 301, à l'emplacement de l'URL substituée. Le L indicateur indique à mod_rewrite que pas d'autres règles suivantes qui doivent être traitées.

Notez que j'ai spécifié l'URL de destination complète dans la substitution, parce que sinon mod_rewrite utilise la forme courte de mon adresse . Pour éviter les problèmes d'indexation de Google, j'ai redirigé tout le trafic non-www à l'hôte avec le préfixe www. J'ai aussi rediriger les pages d'index, par défaut dans le répertoire racine. Les règles pour y parvenir sont les suivantes:

# Rediriger tout le trafic non-www  
RewriteCond% {HTTP_HOST} ^ www.dreamer.weboptime.com \. Com $  
RewriteRule ^.% * Http://www.dreamer.weboptime.com $ {REQUEST_URI} [R = permanent, L]    
# Redirige alias de la page d'accueil sur le site racine  
RewriteRule ^ index \ (php | html | htm). http://www.dreamer.weboptime.com/ [R = permanent, L]

Je laisse au lecteur de comprendre cet exemple en lisant la documentation de mod_rewrite. Le module mod_rewrite offre un moyen très puissant et efficace pour effectuer la redirection. Il est préférable d'utiliser mod_rewrite par un script côté serveur. L'inconvénient est la courbe d'apprentissage abrupte, vous obligeant à apprendre à la fois sa syntaxe et la syntaxe des expressions régulières.

Redirection avec des balises META ou Javascript

Si vous n'avez pas de script côté serveur ou mod_rewrite sur votre serveur web, vous pouvez toujours effectuer une redirection, mais pas avec autant d'élégance. La méthode Javascript / META va rediriger après que les en-têtes et la page aient été chargés. En revanche, la méthode d'en-tête HTTP décrite ci-dessus redirige immédiatement après que les en-têtes soient chargées. Bien que les deux méthodes nécessitent deux requêtes vers le serveur Web, la méthode Javascript / META oblige le navigateur de l'utilisateur à clignoter pour rafraîchir la page. Redirection avec en-têtes HTTP est sans faille, est un gain de temps.

Vous ne pouvez pas envoyer un code de statut 301 via des balises META Javascript ou. Depuis le code d'état HTTP de la page restera 200 OK , la plupart des moteurs de recherche continueront à penser l'emplacement est valide. Toute page rank de l'ancien emplacement ne sera pas transféré vers le nouvel emplacement.

Un autre inconvénient est que certains navigateurs désactiver Javascript ou META refresh. Par conséquent, il faut inclure un lien vers la page de destination dans le corps de la page. On peut aussi ajouter un délai entre le moment où la page est affichée, et quand il redirige. Cependant, je voudrais vivement décourager cela et même pas le décrire ici.

Malheureusement, il est très fréquent de voir retardée META / Javascript rafraîchissement utilisé quand un site ou une page a été déplacée. La page affiche généralement un message disant: "Ce site a été déplacé à ... Votre navigateur sera automatiquement transmis en quelques secondes X. Cliquez ici si votre navigateur ne prend pas automatiquement, vous transmettre." Certains site web, les sites Web en particulier le gouvernement et juridique, ajoutez une telle page intermédiaire chaque fois que vous cliquez sur un lien vers un site externe.

Non seulement est-ce moteur de recherche inamical, mais il présente l'inconvénient supplémentaire de perdre un temps précieux du visiteur pendant la lecture d'informations en tout unneccessary et attendre pour le rediriger. La première règle de conception de sites Web (et écrit) est de traiter le temps de votre lecteur avec respect. Tous les visiteurs à l'exception du plus novice peut dire quand ils quittent votre site pour un autre, et que votre site n'a aucune autorité sur le site externe, il n'ya donc pas besoin de gaspiller tout le monde est temps.

Redirection avec Javascript

   
<html>  
<head>  
<script type="text/javascript">  
window.location.href='http://www.dreamer.weboptime.com/';  
</script>  
</head>  
<body>  
This page has moved to <a href="http://www.dreamer.weboptime.com/">http://www.dreamer.weboptime.com/</a>

    


</body>  
</html>

Notez que la syntaxe qu'ils document.location =''; a été désapprouvée. Utilisez le code ci-dessus, ou alternativement, document.URL =''; .

Redirection avec Meta Refresh

<html>  
<head>  
<meta http-equiv="refresh" content="0;url=http://www.dreamer.weboptime.com/">  
</head>  
<body>  
This page has moved to <a href="http://www.dreamer.weboptime.com/">http://www.dreamer.weboptime.com/</a>  
</body>  
</html>

Comme je l'ai souligné, le META refresh balise doit être évité comme une méthode de redirection. Il ya d'autres moments où il est plus utile. Une situation commune est sur une page où l'information est en constante évolution, comme téléscripteurs de nouvelles ou de stock. Par exemple, la plupart des sites d'informations majeurs comprennent META balises de rafraîchissement dans leurs pages d'accueil. CNN définit l'intervalle de rafraîchissement à 1800 secondes, alors que Google le met à 900 et Yahoo, à 300.Si l'utilisateur bascule vers une autre application pendant un certain temps, quand ils reviennent, ils sont présentés avec le plus de l'information à jour.

Une autre situation est la page d'état pour l'exécution d'une longue durée côté serveur tâche. Un principe bon site de conception est que chaque chargement de page web en une fraction de seconde. Pour des tâches plus longues, les files d'attente et les exécuter sur le serveur, et simplement montrer une page d'état via le web. Les trois états de la page d'état serait en file d'attente , en cours d'exécution , etachevé . La balise de rafraîchissement serait imprimé dans les file d'attente et en cours d'exécutionétats, avec un intervalle de rafraîchissement approprié comme 15 ou 30 secondes. Vous devez toujours mettre un lien pour actualiser manuellement la page de statut, dans le cas où l'utilisateur a désactivé cette balise META dans leur navigateur.

HTTP/1.1 301 Définition Code du statut

 

Du HTTP/1.1 code Définitions Statut section du protocole de transfert hypertexte - HTTP/1.1 RFC 2616, Fielding, et al. Voir la RFC pour tous les codes de statut possibles de redirection, qui comprennent 300 à choix multiples, des 301-déplacé de façon permanente, 302-Found, 303-Voir autres, 304-Pas de modification, 305-utilisation du proxy, et 307-Redirection temporaire. En utilisant le code d'état approprié est valable pour les sites publics, mais vous pouvez probablement le laisser indéterminée lors de la redirection dans une application privé ou intranet.

La ressource demandée a été assigné à un nouvel URI permanent et toute référence future à cette ressource DEVRAIT utiliser l'une des URIs retournées dans la. Les clients ayant des capacités d'édition de liens doit automatiquement re-lien des références à la Request-URI à un ou plusieurs des nouvelles références retournées par le serveur, lorsque cela est possible.Cette réponse est cachable sauf indication contraire.

La nouvelle URI permanent doit être donné par le champ Location dans la réponse. Sauf si la méthode de demande était HEAD, l'entité de la réponse DEVRAIT contenir une brève note hypertexte avec un hyperlien vers la nouvelle URI (s).

Si le code de statut 301 est reçu en réponse à une demande autre que GET ou HEAD, l'agent utilisateur NE DOIT PAS automatiquement rediriger la demande sauf s'il peut être confirmé par l'utilisateur, car cela pourrait modifier les conditions dans lesquelles la demande a été délivré.

Remarque: Lorsque redirigent une requête POST après avoir reçu un code de statut 301, certains HTTP/1.0 existants agents utilisateurs par erreur cette requête en une requête GET.

Utilisation de Dreamweaver

Dreamweaver® est une marque déposée d'Adobe® Systems Incorporated. Les logos et les noms de marques cités dans ce site sont les propriétés respectives de leurs développeurs.

 

Création de sites web

hit counter