Aller au contenu

Réécriture d'url par script : quel code renvoyer ?


Sujets conseillés

Salut,

Je fais de la réécriture d'URL en utilisant un script PHP et le mode multiview d'apache. Mais quel code mon script doit-il renvoyer ? Dans les exemples que j'ai trouvés, on voit tantôt un code 200 (Ok), tantôt un code 301 (Redirect permanent)...

Sachant que mon script s'appelle pseudorep.php, je voudrais que google me référence http://www.monsite.com/pseudorep/option1/o...2/unfichier.htm le script se chargeant de renvoyer sur http://www.monsite.com/unfichier.php?option1&option2

Accessoirement, j'ai quelques urls du type http://www.monsite.com/unfichier.php?option1&option2 qui sont déjà référencées, et dont j'aimerais si possible récupérer le PR.

Alors, quel code faut-il utiliser : 200 ou 301 ?

Lien vers le commentaire
Partager sur d’autres sites

Bonjour et bienvenue sur le Hub,

Idéalement, il faudrait que :

- si l'URL est /unfichier.htm, tu renvoies un code 200.

- si l'URL est /unfichier.php?option1&option2, tu renvoies un code 301 en faisant la redirection vers /unfichier.htm.

Jean-Luc

Lien vers le commentaire
Partager sur d’autres sites

Merci de ta réponse.

Cela expliquerait peut-être les différents codes retour que j'ai vus... Je vais regarder ça de plus près !

- si l'URL est /unfichier.php?option1&option2, tu renvoies un code 301 en faisant la redirection vers /unfichier.htm.

Heu... Oui, mais ma page s'appelle bien unfichier.php en réalité.... Est-ce à dire que je dois, dans un premier temps, faire une redirection vers unfichier.htm, puis ensuite faire mon "rewriting" en renvoyant un code 200 tout en présentant la page unfichier.php?option1&option2 ?

Ca fait un peu bizarre de passer par ces chemins détournés pour finalement présenter exactement l'url demandée, mais dans le fond il y a une certaine logique par rapport au référencement ! Ai-je bien compris ?

Si tu as (un lien vers) quelques explications complémentaires, j'apprécierais beaucoup.

Merci en attendant !

Lien vers le commentaire
Partager sur d’autres sites

Est-ce à dire que je dois, dans un premier temps, faire une redirection vers unfichier.htm, puis ensuite faire mon "rewriting" en renvoyant un code 200 tout en présentant la page unfichier.php?option1&option2 ?
Cest exactement ça.

La redirection vers unfichier.htm doit être conditionelle et ne se faire que quand l'URL est unfichier.php.

Jean-Luc

Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

Salut,

Je reviens sur cette question : un truc m'échappe...

Ma page d'accueil, au gré des liens et référencements divers, est appelée actuellement par les urls suivantes :

-http://www.monsite.tld

-http://www.monsite.tld/

-http://www.monsite.tld/index.php

-http://www.monsite.tld/index.php?lang=fr

Pour être complet, disons que j'ai aussi la même en anglais, mais que si la langue n'est pas précisée dans l'url et que la langue par défaut du navigateur n'est pas le français ou l'anglais, la langue par défaut est le français.

Je voudrais n'avoir plus qu'une url :

-http://www.monsite.tld/script/fr/index.php (ou index.htm si ça apporte vraiment quelque chose)

où script est un script permettant de simuler l'url rewriting non disponible chez mon hébergeur (free.fr).

La redirection de -http://www.monsite.tld/script/fr/index.php vers -http://www.monsite.tld/index.php?lang=fr fonctionne parfaitement, et renvoie bien un code 200. Mais comment faire pour que les anciennes url soient d'abord redirigées en 301 vers la nouvelle ? Plus précisément, où placer cette redirection ?

Il y a bien un moyen : la mettre dans chaque page, et donner un nouveau nom à chaque page. Ou supprimer les anciennes pages, renommer les nouvelles, et utiliser une gestion personnalisée de l'erreur 404... N'y a-t-il pas un autre moyen plus élégant et moins contraignant ? (je rappelle que, sauf astuce que je ne connais pas, l'url rewriting par .htaccess n'est pas possible chez free.fr)

Modifié par Jeanluc
Merci de rendre les liens "bidon" non cliquables
Lien vers le commentaire
Partager sur d’autres sites

Je ne connais pas particulièrement les (im)possibilités de free. Si tu peux créer librement ton script de traitement des erreurs 404, tu dois pouvoir y placer une redirection 301 vers la nouvelle adresse. Dans l'exemple suivant, un document inexistant provoque une redirection 301 vers le plan du site:

<?php
header("Status: 301 Moved Permanently", false, 301);
header("Location: http://www.ton_domaine.com/plan-site.htm");
exit();
?>

Evidemment, le code peut être adapté pour rediriger vers une page donnée en fonction de l'URL qui provoque l'erreur.

Jean-Luc

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

:unsure: Je crois que je n'ai pas su me faire comprendre... Je vais essayer d'être plus simple et plus clair. En fait, le problème serait le même quel que soit l'hébergeur, le fait que ce soit Free ne fait qu'éliminer certaines possibilités de solutions.

Ma page d'accueil est actuellement référencée chez Google par -http://www.exemple.com/index.php. Il faudrait, pour que je ne perde pas le bénéfice de ce lien et pour harmoniser mes urls, que je fasse une redirection 301 vers la nouvelle url -http://www.exemple.com/script/fr/index.php.

Or, cette nouvelle url réécrite renverra finalement ma page ayant pour url réelle -http://www.exemple.com/index.php, donc celle du départ !!! Il y a donc un problème, soit pour faire la redirection 301 vers la nouvelle url, soit pour qu'il n'y ait pas de bouclage.

Je ne vois qu'une solution : que la nouvelle url -http://www.exemple.com/script/fr/index.php pointe vers une nouvelle page d'accueil -http://www.exemple.com/accueil.php, et que soit l'ancienne page nommée index.php fasse la redirection 301 vers la nouvelle url, soit qu'elle soit supprimée, la redirection étant assurée par un traitement personnalisé des erreurs 404.

Cela serait à faire pour toutes les pages, et donc je dois toutes les renommer. Je me demandais (mais je crois de plus en plus que je rêve !) s'il n'y avait pas un moyen moins contraignant et/ou plus élégant de faire cela.

Ce message a été modifié par Jeanluc: hier, 17:41

Edition : Merci de rendre les liens "bidon" non cliquables

:blushing: Ooops... Pardon, j'avais zappé cette règle du forum... J'ai aussi vu qu'il ne fallait pas employer monsite.tld, mais exemple.com réservé à cet effet... J'essaierai de ne plus oublier !

Il y a aussi des liens bidons cliquables dans mes posts précédents, mais je ne peux plus les éditer...

Lien vers le commentaire
Partager sur d’autres sites

Je ne me rappelle pas avoir lu quelque part de mention pour exemple.com (et pourquoi forcément celui-là ? il ne nous appartient pas ;))

Pour ce qui est des liens bidons, c'est juste qu'un script maison rend invisibles les messages des nouveaux qui postent trop de liens (pour éviter le spam). Il y a parfois des faux positifs, comme le tien, qui nous obligent à rendre le message à nouveau visible et te réattribuer tes droits ;)

Lien vers le commentaire
Partager sur d’autres sites

Je ne me rappelle pas avoir lu quelque part de mention pour exemple.com (et pourquoi forcément celui-là ? il ne nous appartient pas ;))

Tout simplement parce que je suis brouillé avec l'orthographe entre anglais et français :c_tonguesmile: Il s'agit bien sûr de example.com avec un A ! Et c'est justement parce qu'il n'appartient et ne peut appartenir à personne que c'est forcément celui-là ;)

En tous cas, merci d'avoir rétabli mes droits malgré mon irrespect des règles :)

Pour mon problème, j'ai été imaginer des trucs bien compliqués... A moins que quelqu'un connaisse une meilleure solution, je pense que je vais tout simplement renvoyer les urls réécrites (-http://www.example.com/script/fr/index.php) vers un répertoire, et modifier ou supprimer toutes les pages de la racine pour faire la redirection. Si ce n'est pas propre, ça a au moins le mérite d'être simple à mettre en oeuvre.

Lien vers le commentaire
Partager sur d’autres sites

En tous cas, merci d'avoir rétabli mes droits malgré mon irrespect des règles :)

Rassure-toi, tu n'as enfreint aucune règle ;)

Il n'y a pas de limite au nombre d'urls dans les messages postés par les membres. C'est juste qu'on a pu constater que lorsqu'un nouveau membre poste un message avec un certain nombre d'urls, c'est sûr à 80% qu'il sagit de spam ou de publicité déguisée.

Dan a donc fait une fonction ne s'appliquant qu'aux nouveaux membres, mais qui a parfois des ratés, d'où la nécessité de corriger rapidement le tir ;)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Encore un truc qui me chagrine...

Mon script de réécriture d'url refuse de me renvoyer un code 200 :

header("Status: 200 OK");
header('Location: '.$urlfinale);

Mais j'obtiens :

HTTP/1.1 301 Moved Permanently
Date: Wed, 20 May 2009 06:57:11 GMT
Server: Apache/ProXad [Aug 9 2008 02:45:09]
Location: -http://www.exemple.com/script/fr/index.php
Connection: close
Cache-Control: no-cache, no-store, must-revalidate
Content-Type: text/html; charset=iso-8859-1

HTTP/1.1 302
Date: Wed, 20 May 2009 06:57:11 GMT
Server: Apache/ProXad [Aug 9 2008 02:45:09]
X-Powered-By: PHP/4.4.3-dev
Location: -http://www.exemple.com/index.php?lang=fr
Connection: close
Content-Type: text/html

HTTP/1.1 200 OK
Date: Wed, 20 May 2009 06:57:11 GMT
Server: Apache/ProXad [Aug 9 2008 02:45:09]
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Pragma: no-cache
X-Powered-By: PHP/4.4.3-dev
Set-Cookie: PHPSESSID=ee9bbd6cc3af0a74a02c321bf1f27c61; path=/
Connection: close
Content-Type: text/html

Le code header("Status: 200 OK"); n'est pas pris en compte. Mais si je mets un autre code que 200, cela fonctionne parfaitement...

Une autre solution consisterait à utiliser un include au lieu d'un header(Location :), mais cela ne fonctionne pas non plus, probablement à cause d'un conflit de headers entre ceux positionnés dans le script lui-même, et ceux dans le fichier inclu. Il faudrait probablement que je réécrive différemment toutes les pages...

Donc, je cherche :

- soit un moyen pour lancer mes pages sans que ça soit considéré comme une nouvelle redirection et avoir un code 200 à la place du 302,

- soit un code à renvoyer qui fasse en sorte que Google référence bien l'URL réécrite (celle avant traitement par le script).

Pour la seconde solution, je me demandais si un code 307 pourrait faire l'affaire ? A noter que les codes 20x fonctionnent, seul le 200 n'est pas pris en compte... Mais je ne sais pas trop lequel pourrait s'appliquer ici ?

Lien vers le commentaire
Partager sur d’autres sites

Mon script de réécriture d'url refuse de me renvoyer un code 200 :

header("Status: 200 OK");
header('Location: '.$urlfinale);

Là, tu fais une redirection avec "Location" et tu essaies d'envoyer un code "200". Tu ne peux pas faire les deux en même temps. :nonono:

Tu ne penses pas passer sur un hébergement payant et pas cher, plutôt que de passer du temps à contourner les limitations de l'hébergeur gratuit ? ;)

Jean-Luc

Lien vers le commentaire
Partager sur d’autres sites

Tu ne penses pas passer sur un hébergement payant et pas cher, plutôt que de passer du temps à contourner les limitations de l'hébergeur gratuit ? ;)

Tout à fait d'accord ! Si ça ne tenait qu'à moi... :sick:

Cela dit, n'ayant pas vraiment le choix, je me dis qu'à titre personnel ça peut m'apporter quelque chose, ne serait-ce qu'une meilleure connaissance de ces codes HTTP dont on ne connait que les trois ou quatre principaux et encore, très mal ! Faute de mieux, je prends un peu cela comme un défi ;)

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...