Version complète: sur le forum Webmaster Hub : Supprimer les slashes inutiles en fin d'url
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net
kriss
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.
blman
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.

CODE
$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();
}
crocxx
Bonjour,
Si tu veut seulement récupéré l'host d'une adresse tu peu utiliser parse_url() de php:

http://www.zone-webmasters.net/codes-sourc...url-en-php.html

Je pense que cela peu t'aider wink.gif

CODE
$url = parse_url($url);
$url = $url['host'];
kriss
La solution php est effectivement très intéressante dans le cas ou Apache ne saurait pas le faire...
Dan
Apache SAIT le faire, bien évidemment.

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

CODE
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.
kriss
Merci Dan ! J'essaye de ce pas !
kriss
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 ?
kriss
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.
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.