Aller au contenu

Supprimer les slashes inutiles en fin d'url


kriss

Sujets conseillés

Bonsoir.

Lorsqu'elles veulent citer une url ou établir un lien vers une page, beaucoup de personnes ajoutent un slash en fin d'url...

Lors de l'accès à l'url en question, cela provoque souvent une belle pagaille car tous les adressages relatifs contenus dans la page sont perdus...

Existe t-il un moyen (url rewriting, conf d'Apache, ...?) qui permettrait, à l'arrivée de supprimer ces slashes inutiles en fin d'url ?

Merci.

Lien vers le commentaire
Partager sur d’autres sites

Un petit code rapide en PHP à mettre avant tout affichage de code HTML. A retester mais ça devrait fonctionner. Il y a même surement moyen de simplifier l'écriture.

$UriEnCours=$_SERVER['REQUEST_URI'];
$UriEnCoursControle=$UriEnCours;
while(strpos($UriEnCoursControle,"//")!==false){
$UriEnCoursControle=str_replace("//","/",$UriEnCoursControle);
}
if($UriEnCoursControle!=$UriEnCours){
header("Status: 301 Moved Permanently");
header("Location: ".$UriEnCoursControle);
exit();
}

Lien vers le commentaire
Partager sur d’autres sites

Apache SAIT le faire, bien évidemment.

Avec l'utilisation du .htaccess, ça donnerait :

RewriteEngine  on
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+[^/])$ $1/ [R]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.+)/$ $1 [R]

Si je ne me suis pas loupé, ces règles ajoutent un "trailing slash" aux répertoires, et le retirent pour les fichiers.

Lien vers le commentaire
Partager sur d’autres sites

Merci Dan ! C'est beaucoup mieux car seules les url vraiment valides fonctionnent (un gros progrès).

Par-contre en cas d'urls terminées par un slash :

h*tp://www.toto.com/pages/

h*tp://www.toto.com/pages/accueil.php/

Apache tente de remonter à : /home/toto/webpages/home ( pour info, mon DocumentRoot est : /home/toto/webpages )

étrange non ?

Lien vers le commentaire
Partager sur d’autres sites

Pour retirer le slash en fin de nom de fichier, la règle suivante semble bien fonctionner :

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.+)/$ /$1 [R=301,L]

Avec une petite redirection 301, histoire que les robots n'y reviennent pas trop...

Ca peut économiser quelques tonnes d'erreurs 404 dans les logs, et l'air de rien, beaucoup de sites sont mal protégés contre cette habitude de mettre un slash en fin d'url.

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