Redirection PHP en relatif et Headers HTTP
16 messages • Page 1 sur 2 • 1, 2
Consultez la formation sur les stratégies de liens de WebRankInfo / Ranking Metrics
Redirection PHP en relatif et Headers HTTP
Bonjour,
c'est mon premier message ici.
Je viens de déplacer des pages sur mon site; les anciennes étaient
statiques HTML et référencées, les nouvelles sont dynamiques PHP.
Je m'apprête à utiliser le conseil "redirection 301" plutôt que "redirection
par Refresh" qui était ma première tentative.
Cela m'occasionne deux questions:
- c'est normal que je doive envoyer les headers HTTP avant la redirection ?
(sinon, sur mon site de test local ça ne marche pas)
- est-ce qu'une redirection en relatif sur le site (URL partielle)
fonctionnera en termes de référencement ?
Voici le code en question: il redirige une page
/zdoc/fr_index.html vers /oklin2/zdoc/ok1_zdoc.php?lang=fr
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
</HEAD>
<BODY> </BODY>
</HTML>
<?php
header("Status : 301 Moved Permanently");
header("Location: /oklin2/zdoc/ok1_zdoc.php?lang=fr");
exit();
?>
Merci pour toute aide.
Vincent.
c'est mon premier message ici.
Je viens de déplacer des pages sur mon site; les anciennes étaient
statiques HTML et référencées, les nouvelles sont dynamiques PHP.
Je m'apprête à utiliser le conseil "redirection 301" plutôt que "redirection
par Refresh" qui était ma première tentative.
Cela m'occasionne deux questions:
- c'est normal que je doive envoyer les headers HTTP avant la redirection ?
(sinon, sur mon site de test local ça ne marche pas)
- est-ce qu'une redirection en relatif sur le site (URL partielle)
fonctionnera en termes de référencement ?
Voici le code en question: il redirige une page
/zdoc/fr_index.html vers /oklin2/zdoc/ok1_zdoc.php?lang=fr
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
</HEAD>
<BODY> </BODY>
</HTML>
<?php
header("Status : 301 Moved Permanently");
header("Location: /oklin2/zdoc/ok1_zdoc.php?lang=fr");
exit();
?>
Merci pour toute aide.
Vincent.
Salut Vincent et bienvenue à bord !
Les entêtes doivent être envoyées avant toute chose. Ce que tu constates est donc normal. Attention à ne pas avoir ne fût-ce qu'une balise BR qui traîne avant cela.
Le standard HTTP/1.1 exige une URI absolue comme argument à Location:
Certains clients interprètent une adresse relative, mais c'est prendre un risque inutile.
Surtout si tu veux renvoyer une entête 301 ...
Il faut donc que tu mettes:
Dan
Les entêtes doivent être envoyées avant toute chose. Ce que tu constates est donc normal. Attention à ne pas avoir ne fût-ce qu'une balise BR qui traîne avant cela.
Le standard HTTP/1.1 exige une URI absolue comme argument à Location:
Certains clients interprètent une adresse relative, mais c'est prendre un risque inutile.
Surtout si tu veux renvoyer une entête 301 ...
Il faut donc que tu mettes:
- Code: Tout sélectionner
<?php
header("Status : 301 Moved Permanently");
header("Location: http://www.domane.tld/oklin2/zdoc/ok1_zdoc.php?lang=fr");
exit();
?>
Dan
Dernière édition par hetzeld le Mer Juil 09, 2003 10:07, édité 2 fois.
Bonjour vwartelle, et bienvenue sur Webrankinfo !
Non, il n'est pas normal que tu envois le moindre caractère avant la redirection. Normalement ta page doit se réduire à :
<?php
header("Location: /oklin2/zdoc/ok1_zdoc.php?lang=fr");
?>
Ca fait quelques temps que je n'ai pas écris de php, donc il y a peut-être une erreur. Mais ce qui est important, c'est que ta page ne doit contenir QUE LA REDIRECTION. Tout le reste, est inutile.
Pour ta seconde question, bien sur, les redirections relatives fonctionnent très bien, même en terme de référencement.
a+
Non, il n'est pas normal que tu envois le moindre caractère avant la redirection. Normalement ta page doit se réduire à :
<?php
header("Location: /oklin2/zdoc/ok1_zdoc.php?lang=fr");
?>
Ca fait quelques temps que je n'ai pas écris de php, donc il y a peut-être une erreur. Mais ce qui est important, c'est que ta page ne doit contenir QUE LA REDIRECTION. Tout le reste, est inutile.
Pour ta seconde question, bien sur, les redirections relatives fonctionnent très bien, même en terme de référencement.
a+
hetzeld a écrit:Le standard HTTP/1.1 exige une URI absolue comme agrument à Location:
Salut Dan !!
Dis moi en ASP je me contente d'un :
reponse.redirect("/mapage.asp")
La question est donc : "Est-ce que ASP et PHP ne complètent pas cet ordre pour le rendre absolu ?"
a++
Salut Richard,
Je donnais la syntaxe de la fonction PHP header...
http://www.zend.com/manual/function.header.php
Pour ASP, je n'en ai aucune idée.
Dan
Je donnais la syntaxe de la fonction PHP header...
http://www.zend.com/manual/function.header.php
Pour ASP, je n'en ai aucune idée.
Dan
merci + oups
Merci pour vos réponses !
En fait j'avais fait n'importe quoi.
Ca donnait l'impression de marcher en raison de l'ancienne balise meta
Refresh, qui devait être restée en cache.
En réalité mon code ne marche pas du tout, il n'est pas interprété
parce que dans un fichier en extension .html (et non .php).
Donc :
je peux rediriger la page index.html (en anglais) en la remplaçant par
une page index.php qui fait la redirection, et cela seulement.
Par contre rediriger la page fr_index.html paraît plus délicat, en l'absence
de meilleure idée je laisserai la balise Refresh.
Sauf s'il y a moyen d'indiquer que la page fr_index.html doit être traitée
par le parser PHP : c'est possible, ça ?
Vincent.
En fait j'avais fait n'importe quoi.
Ca donnait l'impression de marcher en raison de l'ancienne balise meta
Refresh, qui devait être restée en cache.
En réalité mon code ne marche pas du tout, il n'est pas interprété
parce que dans un fichier en extension .html (et non .php).
Donc :
je peux rediriger la page index.html (en anglais) en la remplaçant par
une page index.php qui fait la redirection, et cela seulement.
Par contre rediriger la page fr_index.html paraît plus délicat, en l'absence
de meilleure idée je laisserai la balise Refresh.
Sauf s'il y a moyen d'indiquer que la page fr_index.html doit être traitée
par le parser PHP : c'est possible, ça ?
Vincent.
Salut Vincent,
Pourquoi n'utilises tu pas simplement une ou deux règles de réécriture dans ton .htaccess ?
Tu es sur un 90plan OVH et le mod_rewrite est activé.
Si tu as des doutes quant-à sa mise en place, donnes-nous tes anciennes pages (ou répertoires) ainsi que les nouvelles. On pourra sûrement t'aider.
Dan
PS: l'utilisation de header("location:...."); impose de laisser l'ancienne page sur ton serveur, pour contenir la redirection. Avec mod_rewrite, tu t'affranchis de cette obligation
Pourquoi n'utilises tu pas simplement une ou deux règles de réécriture dans ton .htaccess ?
Tu es sur un 90plan OVH et le mod_rewrite est activé.
Si tu as des doutes quant-à sa mise en place, donnes-nous tes anciennes pages (ou répertoires) ainsi que les nouvelles. On pourra sûrement t'aider.
Dan
PS: l'utilisation de header("location:...."); impose de laisser l'ancienne page sur ton serveur, pour contenir la redirection. Avec mod_rewrite, tu t'affranchis de cette obligation
essais avec url rewrite
Voici le moment venu pour les quelques conseils.
Dan, j'ai lu ton article -->
Je fais des essais sur mon EasyPHP local, dans lequel j'ai activé mod_rewrite.
Dans le .htaccess de la racine, j'ai ajouté ceci
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^nexistepas.html$ /oklin2/trouve.html [L]
Et ça marche; c'est à dire le browser affiche l'URL .../nexistepas.html
avec le contenu de /oklin2/trouve.html
Maintenant, si j'ajoute ceci :
RewriteRule ^fr_index.html$ /oklin2/zdoc/ok1_zdoc.php?lang=fr [L]
Cela marche toujours mais les liens vers les images (qui sont en relatif, de type
../pictures/) ne sont plus valides. Il m'est possible de les changer, mais
j'aimerais comprendre avant !
Et si j'écris :
RewriteRule ^/zdoc/fr_index.html$ /oklin2/zdoc/ok1_zdoc.php?lang=fr [L]
ou bien
RewriteRule ^\/zdoc\/fr_index.html$ /oklin2/zdoc/ok1_zdoc.php?lang=fr [L]
alors là ça ne marche pas.
Vincent.
Dan, j'ai lu ton article -->
Je fais des essais sur mon EasyPHP local, dans lequel j'ai activé mod_rewrite.
Dans le .htaccess de la racine, j'ai ajouté ceci
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^nexistepas.html$ /oklin2/trouve.html [L]
Et ça marche; c'est à dire le browser affiche l'URL .../nexistepas.html
avec le contenu de /oklin2/trouve.html
Maintenant, si j'ajoute ceci :
RewriteRule ^fr_index.html$ /oklin2/zdoc/ok1_zdoc.php?lang=fr [L]
Cela marche toujours mais les liens vers les images (qui sont en relatif, de type
../pictures/) ne sont plus valides. Il m'est possible de les changer, mais
j'aimerais comprendre avant !
Et si j'écris :
RewriteRule ^/zdoc/fr_index.html$ /oklin2/zdoc/ok1_zdoc.php?lang=fr [L]
ou bien
RewriteRule ^\/zdoc\/fr_index.html$ /oklin2/zdoc/ok1_zdoc.php?lang=fr [L]
alors là ça ne marche pas.
Vincent.
Bonjour,
Avec une règle comme:
tu tombes dans le "piège" des répertoires virtuels (c'est dans l'article
)
En quelques mots, lors de cette redirection, le navigateur cherche à résoudre les liens relatifs dans un répertoire qui n'existe pas...
Tu peux t'en sortir de 2 manières:
1 - tu mets des liens absolus pour toutes les images (et toutes les balises <a>...)
2 - tu utilises la balise < base href=... > (sans l'espace après le <
)
Pour ton dernier exemple:
devrait marcher ! (sans le ^/)
Dan
Avec une règle comme:
- Code: Tout sélectionner
RewriteRule ^fr_index.html$ /oklin2/zdoc/ok1_zdoc.php?lang=fr [L]
tu tombes dans le "piège" des répertoires virtuels (c'est dans l'article
En quelques mots, lors de cette redirection, le navigateur cherche à résoudre les liens relatifs dans un répertoire qui n'existe pas...
Tu peux t'en sortir de 2 manières:
1 - tu mets des liens absolus pour toutes les images (et toutes les balises <a>...)
2 - tu utilises la balise < base href=... > (sans l'espace après le <
Pour ton dernier exemple:
- Code: Tout sélectionner
RewriteRule zdoc/fr_index.html$ /oklin2/zdoc/ok1_zdoc.php?lang=fr [L]
devrait marcher ! (sans le ^/)
Dan
Merci pour le dépannage.
J'ai cru observer que la redirection ne fonctionnait pas si l'ancienne page
était toujours présente. C'est bien le cas ?
Au bout du compte je m'apprête à mettre ceci en place :
1. redirection ancienne page francophone
RewriteRule ^zdoc/fr_index.html$ /oklin2/zdoc/ok1_zdoc.php?lang=fr [L]
2. redirection par défaut sur page anglophone
RewriteRule ^zdoc.*$ /oklin2/zdoc/ok1_zdoc.php?lang=en [L]
(bon, peut-être un peu violent...)
3. générer sur chaque page dynamique du site
< base href = "url_complete_avec?lang=quivabien">
- sans l'espace entre < et base, bien entendu
parce que sinon il faut effectivement tout mettre en
absolu, y compris les liens <a href=#surlamemepage>
Encore des pièges ou je fonce ?
Vincent.
J'ai cru observer que la redirection ne fonctionnait pas si l'ancienne page
était toujours présente. C'est bien le cas ?
Au bout du compte je m'apprête à mettre ceci en place :
1. redirection ancienne page francophone
RewriteRule ^zdoc/fr_index.html$ /oklin2/zdoc/ok1_zdoc.php?lang=fr [L]
2. redirection par défaut sur page anglophone
RewriteRule ^zdoc.*$ /oklin2/zdoc/ok1_zdoc.php?lang=en [L]
(bon, peut-être un peu violent...)
3. générer sur chaque page dynamique du site
< base href = "url_complete_avec?lang=quivabien">
- sans l'espace entre < et base, bien entendu
parce que sinon il faut effectivement tout mettre en
absolu, y compris les liens <a href=#surlamemepage>
Encore des pièges ou je fonce ?
Vincent.
Dernière édition par vwartelle le Mer Juil 09, 2003 15:59, édité 1 fois.
Vincent,
Pourrais-tu nous donner les noms exacts des ancien fichiers, et ce par quoi ils sont remplacés.
Si tu veux faire une recirection permanente, il faut utiliser le flag [R=301] ainsi qu'ine URI complète en deuxième paramètre.
Exemple:
Dan
Pourrais-tu nous donner les noms exacts des ancien fichiers, et ce par quoi ils sont remplacés.
Si tu veux faire une recirection permanente, il faut utiliser le flag [R=301] ainsi qu'ine URI complète en deuxième paramètre.
Exemple:
- Code: Tout sélectionner
RewriteRule ^zdoc/fr_index.html$ http://www.tondomaine.tld/oklin2/zdoc/ok1_zdoc.php?lang=fr [R=301,L]
Dan
Pour répondre à ta dernière réponse que j'aperçois juste au moment d'Envoyer :
- il ne s'agit pas vraiment d'une redirection
permanente, j'aime autant que l'ancienne URL reste valide comme point d'entrée.
- ancien fichier = par exemple /www/zdoc/fr_index.html et
/www/zdoc/index.html, deviennent l'un et l'autre
/www/oklin2/zdoc/ok1_zdoc.php?lang=fr (et ?lang=en)
Sinon j'ai mis le " " entre le < et le base.
J'ai fait les modifs sur mon site.
zdoc/fr_index.html$ , zdoc.*$ , lipsumcolor/fr_index.html$ et lipsumcolor.*$
sont "urlrewrités".
Je suppose qu'on peut appliquer la même manip à
/index.html et /fr_index.html .
Mais faut-il également le faire pour / (la racine tout court) ?
Dernière question: peut-on se servir de cette manip pour masquer
l'id de session PHP ? (que j'ai employé pour éviter l'envoi de cookies)
A mon avis non, mais ai-je tout compris ?
Vincent.
- il ne s'agit pas vraiment d'une redirection
permanente, j'aime autant que l'ancienne URL reste valide comme point d'entrée.
- ancien fichier = par exemple /www/zdoc/fr_index.html et
/www/zdoc/index.html, deviennent l'un et l'autre
/www/oklin2/zdoc/ok1_zdoc.php?lang=fr (et ?lang=en)
Sinon j'ai mis le " " entre le < et le base.
J'ai fait les modifs sur mon site.
zdoc/fr_index.html$ , zdoc.*$ , lipsumcolor/fr_index.html$ et lipsumcolor.*$
sont "urlrewrités".
Je suppose qu'on peut appliquer la même manip à
/index.html et /fr_index.html .
Mais faut-il également le faire pour / (la racine tout court) ?
Dernière question: peut-on se servir de cette manip pour masquer
l'id de session PHP ? (que j'ai employé pour éviter l'envoi de cookies)
A mon avis non, mais ai-je tout compris ?
Vincent.
Tu auras quelques difficultés à redirectionner la racine, comme tes pages nouvelles se trouvent justement dans un sous répertoire de cette même racine
Quant-aux identifiants de session, tu devrais pouvoir trouver sur le forum un petit script en php qui teste le useragent avant de lancer une session.
A la louche, c'est quelque chose comme:
Dan
Quant-aux identifiants de session, tu devrais pouvoir trouver sur le forum un petit script en php qui teste le useragent avant de lancer une session.
A la louche, c'est quelque chose comme:
- Code: Tout sélectionner
$spiders = array("Googlebot", "crawler", "Slurp", "Fast","ia_archiver","Scooter","Robot","VoilaBot","W3C","ZyBorg","Deepindex","xecho");
$is_spider = false;
foreach($spiders as $Val)
{
if (eregi($Val, $_SERVER["HTTP_USER_AGENT"]))
{
$is_spider = true;
break;
}
}
// Session
ini_set("session.use_trans_sid", "0");
if(!$is_spider) {
session_start();
}
Dan
16 messages • Page 1 sur 2 • 1, 2
Formation recommandée sur ce thème :
Formation Netlinking (liens et référencement) : apprenez ce qu'est réellement un bon lien pour le référencement et surtout comment en obtenir. Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.
Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.
Lectures recommandées sur ce thème :
- Redirection (PHP, JavaScript, serveur...)
- Contrer une redirection 302 intempestive...
- Optimiser ses codes HTTP pour le référencement
- Aperçu des différents types de redirection
- Référencement : gestion des redirections par Yahoo
- A propos des redirections "sauvages"
- Des bons outils pour les spécialistes des Web Analytics
- A propos des redirections sauvages (302)
- Le détournement de page par redirection
- Comment faire des liens en dur dans son annuaire
- Tester le type de redirection
Cet outil vous permet de tester la validité d'un lien pour le référencement. Il vous indique la nature du lien (lien en dur, redirection bien gérée par les moteurs ou redirection mal gérée par les moteurs). - Analyse de l'entête HTTP
Cet outil vous permet de connaître le code HTTP renvoyé par le serveur pour une page donnée.
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités






le forum