kriss Posté 27 Août 2008 Posté 27 Août 2008 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 Posté 27 Août 2008 Posté 27 Août 2008 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();}
crocxx Posté 27 Août 2008 Posté 27 Août 2008 (modifié) 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 $url = parse_url($url); $url = $url['host']; Modifié 27 Août 2008 par crocxx
kriss Posté 27 Août 2008 Auteur Posté 27 Août 2008 La solution php est effectivement très intéressante dans le cas ou Apache ne saurait pas le faire...
Dan Posté 27 Août 2008 Posté 27 Août 2008 Apache SAIT le faire, bien évidemment. Avec l'utilisation du .htaccess, ça donnerait : RewriteEngine onRewriteCond %{REQUEST_FILENAME} -dRewriteRule ^(.+[^/])$ $1/ [R]RewriteCond %{REQUEST_FILENAME} -fRewriteRule ^(.+)/$ $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 Posté 27 Août 2008 Auteur Posté 27 Août 2008 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 Posté 27 Août 2008 Auteur Posté 27 Août 2008 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.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant