RewriteRule & répertoire

Nouveau WRInaute
Bonjour à tous,
je découvre peu à peu l'url rewriting et je suis confronté depuis quelques heures à un problème sans trouver de réponse ici ou ailleurs... J'aimerais faire cohabiter plusieurs règles qui, séparément fonctionnent. Mais qui, une fois dans le même ficher .htaccess renvoient vers une 404.

La première règle c'est :
Code:
RewriteRule ^(.*)\.html$ /$1.php [QSA,L,R=301]
Elle me permet de réécrire tous mes fichiers php en fichier html

La deuxième comporte très certainement une faille. J'aimerais accèder à l'index du répertoire rep1 depuis la racine du site
ex: ../rep1.html à la place de ../dir/rep1/index.php
=> est ce bien :
Code:
 RewriteRule ^(.*)\.html$ /dir/$1/index.php [QSA,L,R=301]

Enfin, la 3eme ressemble fortement à la 2ème mais est un peu plus complexe.
ex: ../rep1-rep2.html à la place de ../dir/rep1/rep2/index.php
=> est ce bien :
Code:
 RewriteRule ^(.*)-(.*)\.html$ /dir/$1/$2/index.php [QSA,L,R=301]

Où ai je faux svp? Je n'arrive pas à voir ou je fais une (des) errreurs. Pourriez vous m'aider svp... :oops:
 
WRInaute passionné
attention car les règles sont évaluées dans l'ordre. La première qui "match" est appliquée. Les deux premières règles ne sont pas compatibles sans ajouter une condition. Essaye d'ajouter une condition pour tester si le fichier .php existe :
Code:
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.*)\.html$ /$1.php [QSA,L,R=301]
RewriteCond %{DOCUMENT_ROOT}/dir/$1/index.php -f
RewriteRule ^(.*)\.html$ /dir/$1/index.php [QSA,L,R=301]
RewriteCond %{DOCUMENT_ROOT}/dir/$1/$2/index.php -f
RewriteRule ^(.*)-(.*)\.html$ /dir/$1/$2/index.php [QSA,L,R=301]
 
Nouveau WRInaute
nickel forty!! Ca fonctionne impec!

MERCI !!


sinon j'avais mis un paramètre en trop ("R=301") pour ce que je veux faire.
 
Nouveau WRInaute
j'ai encore un petit probleme svp. Lorsqu'il y a un tiret ("-") dans le répertoire 2, j'ai une erreur 404... Ca doit être le "(.*)" qu'il faut modifier ?
 
WRInaute passionné
essaye (il ne peut pas y avoir de tiret dans répertoire 1) :
Code:
RewriteRule ^([^-]*)-(.*)\.html$ /dir/$1/$2/index.php [QSA,L,R=301]
 
Nouveau WRInaute
forty a dit:
essaye (il ne peut pas y avoir de tiret dans répertoire 1) :
Code:
RewriteRule ^([^-]*)-(.*)\.html$ /dir/$1/$2/index.php [QSA,L,R=301]

le souci c'est que dans presque tous mes répertoires $1, il y a un tiret :twisted:

et il y a en a 1 fois sur 2 dans mes répertoires $2


il y a une solution stp? :oops:
 
WRInaute passionné
essaye avec :
Code:
RewriteCond %{DOCUMENT_ROOT}/dir/$1/$2/index.php -f
RewriteRule ^([^-]*)-(.*)\.html$ /dir/$1/$2/index.php [QSA,L,R=301]
RewriteCond %{DOCUMENT_ROOT}/dir/$1/$2/index.php -f
RewriteRule ^([^-]*-[^-]*)-(.*)\.html$ /dir/$1/$2/index.php [QSA,L,R=301]

sinon change de séparateur pour en prendre un qui n'existe pas dans $1
 
Discussions similaires
Haut