Redirection 301 par header PHP

WRInaute accro
Bonjour

J'ai mis en place la redirection 301 de mon site http://domain.tld sur http://www.domain.tld , avec un fichier .htaccess à la racine de mon site. Cà fonctionne.

Cependant, il y a deux résultats différents quand je fais:

http://domain.tld/php/courses_anciennes/old_courses.php , et
http://www.domain.tld/php/courses_ancie ... ourses.php

Dans le premier cas, le test de WRI me donne: redirection 301, et dans le deuxième cas, ce même test me donne: redirection 302.

En effet, cette url old_courses.php, fait des redirections 302 par header, et donc il faudrait que je sache comment faire des redirections 301 par header sous PHP.

Le code que j'utilise actuellement ( qui donne une redirection 302 ), est:

header("pragma: no cache");
header("Location: $url");

Ceci remplace la page actuelle, par la page $url, mais fait une redirection 302, et non pas 301.

D'où ma question ( de newbie j'avoue ): Comment faire une redirection 301 en PHP avec l'instruction header, ayant le même effet ?

Merci beaucoup de vos réponses.

Jean Francois Ortolo
 
WRInaute passionné
Je pense que le code suivant devrait le faire ;)
Code:
<?
if ($_SERVER["HTTP_HOST"] != "www.domain.tld") {
    header ('HTTP/1.1 301 Moved Permanently');
    header("Location: http://www.domain.tld".$_SERVER['PHP_SELF']);
}
?>
 
WRInaute accro
nodom a dit:
header("HTTP/1.1 301 Moved Permanently");
header("Location: ".$url);
:wink:

Bonjour nodom

Mais... Si le navigateur est configuré pour un protocole < HTTP/1.1, par ex 1.0, ces instructions fonctionneront quand même ?

Excusez-moi de poser une telle question de newbie, mais je n'ai jamais pensé à ce problème.

Merci beaucoup de ta réponse.

Jean Francois Ortolo
 
WRInaute accro
Réponse
Cà marche... En tout cas avec Firefox comme d'habitude.

Mais l'adresse rendue par le test de WRI, dans le cas sans www, est bien old_courses.php , alors qu'avec www, l'adresse est l'adresse de redirection.

Google ne va-t-il pas faire des histoires, s'il constate que deux pages d'url identique, ne différant que par ce www, donnent des urls résultantes différentes, avec des résultats à l'affichage identiques ?

En d'autres termes, comment faire la redirection 301 de http://domain.tld sur http://www.domain.tld, avec .htaccess, de façon à ce que la redirection soit entièrement transparente, et tienne compte des redirections 301 ultérieures sur des sous-pages ?

Merci beaucoup de vos réponses.

Jean Francois Ortolo
 
WRInaute occasionnel
ortolojf a dit:
Réponse
En d'autres termes, comment faire la redirection 301 de http://domain.tld sur http://www.domain.tld, avec .htaccess, de façon à ce que la redirection soit entièrement transparente, et tienne compte des redirections 301 ultérieures sur des sous-pages ?

Merci beaucoup de vos réponses.

Jean Francois Ortolo

RewriteCond %{HTTP_HOST} ^domain.tld $
RewriteRule ^(.*) http://www.domain.tld /$1 [QSA,L,R=301]
 
WRInaute accro
nodom a dit:
ortolojf a dit:
Réponse
En d'autres termes, comment faire la redirection 301 de http://domain.tld sur http://www.domain.tld, avec .htaccess, de façon à ce que la redirection soit entièrement transparente, et tienne compte des redirections 301 ultérieures sur des sous-pages ?

Merci beaucoup de vos réponses.

Jean Francois Ortolo

RewriteCond %{HTTP_HOST} ^domain.tld $
RewriteRule ^(.*) http://www.domain.tld /$1 [QSA,L,R=301]


Rebonjour nodom

J'avais fait avant, celà:

RewriteEngine on
RewriteCond %{HTTP_HOST} !www.domain.tld$
RewriteRule (.*) http://www.domain.tld/$1 [QSA,L,R=301]

Cà marche très bien, et c'est ce qui me désole:

Quand je fais: http://domain.tld/php/courses_anciennes/old_courses.php , celà me fait maintenant: redirection 301 sur http://www.domain.tld/php/courses_ancie ... ourses.php

Mais quand je fais, avec le www: http://www.domain.tld/php/courses_ancie ... ourses.php
, ceà me fait maintenant: redirection 301 sur http://www.domain.tld/php/courses_ancie ... ourses.php

Ceci avec le test du Header HTTP de WRI.

Evidemment, l'adresse old_courses.php est redirigée par mes soins sur wait2_old_courses.php ( redirection 301 correcte comme ci-dessus ), mais cette adresse wait2_old_courses.php , n'apparaît pas dans le cas où le www n'est pas préfixé au domain.tld

Le test de WRI ne suit que la première redirection, car l'adresse correcte finale des redirections, qu'il devrait y avoir, serait plutôt celle-ci: http://www.domain.tld/php/courses_ancie ... ourses.php
dans les deux cas ( avec et sans www ).

Donc le problème vient du test de WRI, qui ne prend en compte que la première redirection. Mais dans le cas de Google, que va-t-il penser de mes redirections multiples ? C'est tout le problème.

Si Google, comme WRI, ne prend en compte que la première redirection, il va penser que la même url old_courses.php conduit à deux urls différentes ( old_courses.php et wait2_old_courses.php ) suivant que www est absent ou présent, et que va-t-il en déduire ? Celà va-t-il avoir une influence néfaste sur mon référencement ?

Merci beaucoup de tes réponses.

Jean Francois Ortolo
 
WRInaute passionné
Tu veux un header ou un .htaccess ?
Décide toi !

Le code exact pour le .htaccess (attention aux espaces qui ne sont pas bons dans les morceaux de code donnés précédemment).
Code:
RewriteEngine on

RewriteCond %{HTTP_HOST} !www.domain.tld$
RewriteRule (.*) http://www.domain.tld/$1 [QSA,L,R=301]
 
WRInaute accro
Bonjour thickparasite

Tu n'as pas compris.

D'une part, je cherche ( avec .htaccess donc, comme je ne peux pas faire autrement, sinon il y aurait plusieurs instructions header ) à rediriger le domaine http://domain.tld vers le domaine http://www.domain.tld , par une redirection 301, comme recommandé par WRI. Celà, le fichier .htaccess que j'ai programmé comme ci-dessus le fait correctement, mais...

... Je cherche aussi, dans mes script de mon site, à faire des redirections 301 de scripts vers d'autres scripts, pour éviter que la durée d'exécution d'un script, dépasse les 30 secondes fatidiques..., et là, effectivement, le fait que le test de Header HTTP de WRI s'arrête à la première redirection, fait que l'adresse finale qu'il indique, n'est pas la même, dans le cas où le domaine est http://domain.tld , ou http://www.domain.tld , dans le cas où la page indiqué n'est pas la page d'accueil.

D'où ma question: Google suit-il toutes les redirections, sans s'arrêter à la première redirection ? Dans ce cas, l'adresse dans les deux cas est la bonne. Ou bien le test de Google est-il identique à celui de WRI, et dans ce cas le fait qu'il y ait deux adresses finales différentes, avec ou sans www, va-t-il indisposer Google ?

Voilà, j'espère que j'ai bien débroussaillé le problème, merci beaucoup de vos réponses.

Jean-François Ortolo
 
WRInaute occasionnel
Votre besoin n'est pas claire pour la deuxième redirection (30 secondes).
expliquez pourquoi cette redirection? pourquoi 301? comment ça doit marcher coté visiteur? et qu'attendez vous de google? parlez de votre besoin avant de chercher la solution. :D
 
WRInaute accro
nodom a dit:
Votre besoin n'est pas claire pour la deuxième redirection (30 secondes).
expliquez pourquoi cette redirection? pourquoi 301? comment ça doit marcher coté visiteur? et qu'attendez vous de google? parlez de votre besoin avant de chercher la solution. :D

Bonjour nodom

Il ne s'agit pas de "une deuxième redirection".

Il s'agit que je suis en mutualisé, et que la durée d'exécution maximale de mes scripts PHP, est de 30 secondes ( OVH 240Plan ), et que donc je suis obligé de jongler avec des redirections ( plusieurs ) à l'intérieur de chaques scripts, pour aller de scripts en script si besoin. C'est comme ça.

D'autre part, je n'ai, à part la page d'accueil de mon site, que deux pages de référencées, car les deux pages résultantes contiennent un formulaire, et GG ne va pas plus avant.

Pourquoi je souhaite que ce soient des redirections 301, ces mutiples redirections ? Parce que *si je met des redirections 302*, là tout est correct, sauf que le test HTTP Header de WRI, dans le cas de http://domain.tld/sous_repert/page.php indiquera une redirection 301 sur la bonne page page.php, alors qu'avec http://www.domain.tld/sous_repert/page.php indiquera une redirection 302 sur page.php ( la page initiale )

301 dans un cas, 302 dans l'autre, GG risque de perdre les pédales, non ?

Et *si je met des redirections multiples 301 dans mes scripts*, à ce moment-là c'est la même redirection 301 qui est indiquée, mais pas vers la même page: La page source dans le premier cas ( sans www ), la première page redirigée dans le deuxième cas ( avec www ).

Donc le problème, est de savoir si GG suit les redirections 301 multiples, et, au lieu de rester à la page source ( qui est la page page.php quand il n'y a pas de www ), GG va aller jusqu'à la page target, cible des redirections multiples que je fais dans les différents scripts traversés à partir de page.php

D'où la question de mon précédent post.

Bien à vous.

Jean Francois Ortolo
 
WRInaute occasionnel
moi je me pose une autre question. google va-t-il attendre 2 minutes le temps que le script soit exécuté et que toutes les redirection soient réalisée? pour récupérer le contenu de la dernière page?
 
WRInaute passionné
Ok ortolojf je pige mieux.

A mon avis il faut que tu fasses un test car ça me semble un peu tiré par les cheveux :p
Mais si la redirect marche pour le visiteur, il faut espérer que GG emboîte le pas.
nodom précise un paramètre important car même si GG indexe tes pages, il est vraisemblable qu'elles passent sans titre ni decription à terme.

Il faut garder à l'esprit que sur le Web la simplicité est la solution à 99% des problèmes et peut-être que tu peux trouver une solution qui soit plus simple ?
 
WRInaute accro
thickparasite a dit:
Ok ortolojf je pige mieux.

A mon avis il faut que tu fasses un test car ça me semble un peu tiré par les cheveux :p
Mais si la redirect marche pour le visiteur, il faut espérer que GG emboîte le pas.
?


Bonjour thickparasite

Cependant, du temps que j'avais mes redirections multiples par header en 302, GG donnait bien comme page en cache, l'affichage du dernier script redirigé...

Tout le problème serait donc de savoir si GG, dans son évaluation des redirections ( 301, 302... ) tient compte de l'affichage effectif ( en cache ), ou bien fait le même test header HTTP, que WRI.

Une dernière question: Qu'entends-tu par test ?

Je ne peux pas changer le résultat de ces redirections, ni leur effet sur GG, car il y a de toute façon, la redirection par .htaccess, de http://domain.tld sur http://www.domain.tld

J'envisage, au lieu de faire cette redirection de domaine sans www sur domaine avec www, de tout simplement renvoyer une erreur 404 ( non existant ) sur le domaine http://domain.tld . Qu'en penses-tu ? A ce moment-là, GG comprendrait que le domaine http://domain.tld n'existe pas , ce qui est parfois possible, alors que le domaine http://www.domain.tld existe.

Amicalement.

Jean Francois Ortolo
 
WRInaute accro
nodom a dit:
moi je me pose une autre question. google va-t-il attendre 2 minutes le temps que le script soit exécuté et que toutes les redirection soient réalisée? pour récupérer le contenu de la dernière page?


En fait...
Même pour les Courses du lendemain/après-midi, le délai d'affichage est quasi instantané vis-à-vis de GG, car GG passe soit dans la nuit, soit a toutes les chances de ne pas passer juste au moment de la mise à jour des Courses, qui a lieu quand le premier visiteur après 15 h, passe sur cette page. L'autre page est quasi instantanée dans tous les cas.

Cependant, pour la page des Courses du lendemain/après-midi, je suis obligé de procéder avec des redirections multiples, car le délai de mise à jour n'est pas prédictible, inférieur ou légèrement supérieur à 30 secondes.

... Je ne vais quand même pas faire une programmation différente, suivant que la mise à jour doit avoir avoir lieu, ou non ? Il est vrai que je peux savoir dans mon script new_courses.php, si la mise à jour doit avoir lieu ou non, et donc en tenir compte dans la programmation, mais je n'ai pas envie de faire l'effort de modifier mon site de fond en comble comme celà...

Remarque, c'est bien possible que ce que tu dis soit la solution de mon problème... Si je pouvais programmer ces deux pages sans redirections, GG ne verrait que les pages cibles, old_courses.php , ou new_courses.php

Pffoouu, quel effort...

Merci beaucoup de tes conseils.

Jean Francois Ortolo
 
WRInaute accro
Bon, ben...

Je crois que la seule solution pour moi, va être de modifier la programmation de mon site, pour éviter aucune redirection pour ces deux pages, dans tous les cas où celà peut être évité...

Merci beaucoup à vous deux, pour vos conseils, qui m'ont permis de résoudre mon problème.

Amicalement.

Jean Francois Ortolo
 
WRInaute occasionnel
et bien si je me trompe pas, je crois que vous n'avez pas besoin de ces redirections artificiels. vous pouvez éviter le timeout par l'astuce suivante:
commencer à afficher des choses avant la fin du script:
pourcentage de progression par exemple ou même les premiers résultats. il existe une instruction php pour ça: qui permet de commencer l'affichage avant la fin du script. ça c'est pour éviter ces redirections.
pour google, il faut voir s'il ne faut pas faire un lien vers une page préparé d'avance (qui mémrise les résultats calculés avant l'arrivé du google)
rendez moi compte. :wink:
 
WRInaute accro
Bonjour nodom

Voilà, c'était simple comme bonjour.

Je n'ai eu qu'à rajouter des instructions "require" là où GG a la plus forte probabilité de tomber.

Maintenant, voilà ce que ça me donne, quelle que soit l'une des deux pages:

http://domain.tld/sous_repert/page.php -> redirection 301 sur http://www.domain.tld/sous_repert/page.php

http://www.domain.tld/sous_repert/page.php -> réception OK de la page , sans redirection.

Comme c'est le résultat attendu par GG, je pense que le problème est maintenant résolu.

Il reste que dans ces deux page.php, il y a un formulaire... Est-ce que je peux m'attendre à ce que GG ne passe jamais les formulaires ?

Bof, ce serait un peu dur pour GG, d'examiner tous les cas de remplissage de tousles formulaires qu'il rencontrerait...

Merci beaucoup de tes conseils, mon problème semble résolu.

Jean Francois Ortolo

PS GG ne risque pas du tout de tomber sur le visiteur précis où il y a des redirections, car celà n'a lieu que pour un seul visiteur par jour.
 
WRInaute occasionnel
google ne passera jamais votre forumulaire.
astuce:
mettez des liens de type dernières recherche...équivelents aux dernières combiniasons faites par les visiteurs. autrement prévoir des accès par liens au résultats. le sitemap peut aussi faire l'affaire.
 
Discussions similaires
Haut