Ajouter le slash de fin de dossier manquant (Slash Trailing)

Nouveau WRInaute
Bonjour,

Je suis nouveau sur le forum, j'en profite pour vous saluer :)

Je débute avec l'UR et j'aimerais faire une régle pour ajouter les '/' de fin qui manquerais sur les noms de dossier.

Exemple :
http://site.com/accueil
en http://site.com/accueil/

J'ai voulu partir de l'exemple du site Apache :
http://httpd.apache.org/docs-2.0/misc/rewriteguide.html
( Section Trailing Slash Problem )

En cherchant sur le forum j'ai trouvé un thread correspondant mais la personne n'avait pas trouvé de solution et c'était orienté vers une solution php détectant l'erreur 404 ce que je trouve dommage..

J'ai tenté plusieurs règles dont celle du site Apache :
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+[^/])$ $1/ [R]
Celle-ci ne fonctionne pas ( mod_rewrite: maximum number of internal redirects reached. Assuming configuration error. Use 'RewriteOp
tions MaxRedirects' to increase the limit if neccessary.
)

J'ajouterais par la suite une condition pour exclure de cette régle les urls finissant par un nom de fichier mais pour l'instant j'aimerais déjà faire fonctionner la redirection du "/dossier" en "/dossier/"

Pour infos j'ai d'autres régles qui fonctionnent bien et je comprend les expressions régulières.

Merci d'avance pour votre aide
 
Nouveau WRInaute
Apache ne le fait pas par défaut, a moins de créer des Alias pour chaque dossier du genre "Alias accueil accueil/" ..

Mon but est de mettre en place cette conditions dans le .htaccess car je n'aurais pas la main sur le fichier de config httpd.conf

Y a une chose étrange, théoriquement, Apache reconnait si le fichier demandé n'est pas un fichier mais un dossier et doit renvoyer le code d'erreur 301. Cependant lorsque j'ajoute ces 2 lignes dans mon .htaccess :
Code:
ErrorDocument 404 /404.html
ErrorDocument 301 /301.html

Le fichier 301 n'est jamais appelé dans le cas d'un Trailing Slash manquant.. pourtout les 404 fonctionnes bien.
 
Nouveau WRInaute
Apparement le code d'erreur n'est pas détournable, cependant ne peut-on pas faire une règle qui convertit l'url qui n'a pas de slash final tout simplement ?

Si je met juste ça :
Code:
RewriteRule (.+)$ $1/ [L]

Je devrais avoir pour toutes les urls un '/' terminal en plus non ?
J'ai a chaque fois un message m'indiquant qu'il boucle ( maximum internal redirect )
Le coup du [L] ne sert-il pas a lui dire de s'arrêter a cette régle ?


Y a t-il des tutoriaux en français sur l'UR plus détaillé que ceux de WRI ( qui sont très bon mais pas assez précis pour mon cas )

Merci
 
WRInaute occasionnel
Les règles que tu utilises, elles sont dans un httpd.conf ou un .htaccess ? Parce qu'il y a une subtilité avec le .htaccess : une fois que l'URL a été réécrite, elle subit à nouveau tout le traitement d'interprétation et repasse donc par le l'URL Rewriting. S'il n'y a pas de condition d'arrêt adéquate, on boucle. Sinon, il ne reste plus qu'à mettre en place un log du rewriting et voir ce que ca donne.

Sur
Code:
RewriteRule (.+)$ $1/ [L]
tu manipules l'URL uniquement en interne, donc rien de visible pour le client (navigateur).
 
Nouveau WRInaute
Hummm ok je vois,
Etrange ce comportement, je pensais que l'url été soumises aux autres conditions si on avait pas mis le [L] mais je ne savais pas qu'elle repasserais une seconde fois dans le .htaccess ..
J'ai vu sur la doc apache une directive de log, je vais m'en servir c'est une bonne idée :)

Merci
 
WRInaute occasionnel
En fait, il semblerait que l'URL Rewriting (et le reste d'ailleurs) dans les .htaccess soit une véritable Bidouille™ , voir la doc de l'URL Rewriting, section Internal Processing/API phases, point 2. Apparemment, ils sont les premiers étonnés que ca marche. Et pour pouvoir activer les logs, il faut avoir accès au httpd.conf

Code:
RewriteLog /chemin/pour/les/logs/rewrite.log
RewriteLogLevel 9
 
Nouveau WRInaute
Ok, j'avais déjà jetté un oeil sur cette page, mais j'ai pas tout pigé.
Pour le RewriteLog en effet cela ne marchait pas dans le .htaccess et en le foutant dans le httpd.conf j'ai pu les faire fonctionner.

Merci
 
Discussions similaires
Haut