Redirection PHP en relatif et Headers HTTP

Consultez la formation sur les stratégies de liens de WebRankInfo / Ranking Metrics


vwartelle
Nouveau WRInaute
 
Messages: 11
Inscription: Mer Juil 09, 2003 8:58

Redirection PHP en relatif et Headers HTTP

Message le Mer Juil 09, 2003 9:28

Bonjour,

c'est mon premier message ici. :oops:

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. :wink:
Vincent.


hetzeld
WRInaute accro
WRInaute accro
 
Messages: 2209
Inscription: Lun Déc 02, 2002 18:21

Message le Mer Juil 09, 2003 10:03

Salut Vincent et bienvenue à bord ! :wink:

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. :wink:

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.


Richard
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 161
Inscription: Dim Fév 09, 2003 20:30

Message le Mer Juil 09, 2003 10:03

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+


Richard
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 161
Inscription: Dim Fév 09, 2003 20:30

Message le Mer Juil 09, 2003 10:06

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++


hetzeld
WRInaute accro
WRInaute accro
 
Messages: 2209
Inscription: Lun Déc 02, 2002 18:21

Message le Mer Juil 09, 2003 10:09

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. :oops:

Dan


vwartelle
Nouveau WRInaute
 
Messages: 11
Inscription: Mer Juil 09, 2003 8:58

merci + oups

Message le Mer Juil 09, 2003 10:13

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.


hetzeld
WRInaute accro
WRInaute accro
 
Messages: 2209
Inscription: Lun Déc 02, 2002 18:21

Message le Mer Juil 09, 2003 10:19

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


vwartelle
Nouveau WRInaute
 
Messages: 11
Inscription: Mer Juil 09, 2003 8:58

règles de réécriture

Message le Mer Juil 09, 2003 10:29

hetzeld a écrit:Pourquoi n'utilises tu pas simplement une ou deux règles de réécriture dans ton .htaccess ?

Je vais regarder ça, merci.
Vincent.


vwartelle
Nouveau WRInaute
 
Messages: 11
Inscription: Mer Juil 09, 2003 8:58

essais avec url rewrite

Message le Mer Juil 09, 2003 11:03

Voici le moment venu pour les quelques conseils.

Dan, j'ai lu ton article --> :P

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.


hetzeld
WRInaute accro
WRInaute accro
 
Messages: 2209
Inscription: Lun Déc 02, 2002 18:21

Message le Mer Juil 09, 2003 12:40

Bonjour,

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 :wink: )
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 < :wink: )

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


vwartelle
Nouveau WRInaute
 
Messages: 11
Inscription: Mer Juil 09, 2003 8:58

Message le Mer Juil 09, 2003 15:28

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...) :roll:

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 :lol:
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.


hetzeld
WRInaute accro
WRInaute accro
 
Messages: 2209
Inscription: Lun Déc 02, 2002 18:21

Message le Mer Juil 09, 2003 16:19

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:
Code: Tout sélectionner
RewriteRule ^zdoc/fr_index.html$  http://www.tondomaine.tld/oklin2/zdoc/ok1_zdoc.php?lang=fr [R=301,L]


Dan


vwartelle
Nouveau WRInaute
 
Messages: 11
Inscription: Mer Juil 09, 2003 8:58

Message le Mer Juil 09, 2003 16:43

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. :lol:

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 ? :roll:

Vincent.


hetzeld
WRInaute accro
WRInaute accro
 
Messages: 2209
Inscription: Lun Déc 02, 2002 18:21

Message le Mer Juil 09, 2003 19:54

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 :wink:

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


vwartelle
Nouveau WRInaute
 
Messages: 11
Inscription: Mer Juil 09, 2003 8:58

Message le Mer Juil 09, 2003 20:44

OK !

Merci pour tout, je suis content de cette journée de découverte
du monde étrange du référencement et de l'URL-rewriting.

Vincent.

:D

Redirection PHP en relatif et Headers HTTP

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 :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités