Le mod rewrite : flag [L]

Fermé
niahoo Messages postés 247 Date d'inscription lundi 24 décembre 2007 Statut Membre Dernière intervention 23 mai 2010 - Modifié par niahoo le 21/04/2010 à 11:41
niahoo Messages postés 247 Date d'inscription lundi 24 décembre 2007 Statut Membre Dernière intervention 23 mai 2010 - 23 mai 2010 à 18:01
salut la compagnie, (Tiens ils ont viré le "Bonjour," par défaut de base sur ccm Oo)

j'ai un petit problème de rewriting :

voici le code:
RewriteEngine on 
RewriteBase /xxxxxx/xxxxxxx/ 




RewriteRule ^admin/$                                admin.php [L] 
RewriteRule ^admin/index.html$                      admin.php [L] 
RewriteRule ^admin/([a-z]+)-([a-z]+)-([0-9]+).html$ admin.php?mod=$1&act=$2&index=$3 [L] 
RewriteRule ^admin/([a-z]+)-([a-z]+).html$          admin.php?mod=$1&act=$2 [L] 

RewriteRule ^admin/([a-z]+).html$                   admin.php?mod=$1 [L] 
RewriteRule ^([-a-zA-Z]+)$                          controls.php?page=$1&e=lol [L] 
RewriteRule ^$                                      controls.php?page=index&e=300 [L] 
RewriteRule ^(.+)$                                  controls.php?page=$1&e=404








Le truc c'est que si la dernière ligne est commentée, tout fonctionne parfaitement. Si je décommente la dernière ligne, tout passe par cette dernière regexp (normal me direz vous, puisque la regexp accepte tout ce qui a au moins un caractère).

Je ne comprends donc pas pourquoi tout passe par cette dernière expression, malgré la présence des flags [L] que j'ai foutu partout mais qui ne semblent pas très réactif ^^

Y a un truc que j'ai pas saisi donc.

Donc au pire, si ça ne marche pas, y a t'il un mot clé genre 'else' que je peux mettre en dessous, du genre 'si aucune regexp n'a marché, go ici =>>'

Voilà, merci
A voir également:

4 réponses

Chalut =P


Cela signifie quoi le RewriteBase /xxxxxx/xxxxxxx/

À chaque fois que j'ai du utiliser cette option, je mettais juste un RewriteBase /

Si tu mets le [L] à une règle et qu'il continue, c'est que le regexp n'a pas été vérifié ^^

Et quand tu mets .html il faut mettre \.html, même si ça fonctionne sans l'antislash vu que le . est tout caractère sauf retour à la ligne ^^

=P
2
niahoo Messages postés 247 Date d'inscription lundi 24 décembre 2007 Statut Membre Dernière intervention 23 mai 2010 19
21 avril 2010 à 11:41
un p'ti up !
0
niahoo Messages postés 247 Date d'inscription lundi 24 décembre 2007 Statut Membre Dernière intervention 23 mai 2010 19
1 mai 2010 à 18:08
le rewrite base c'est le chemin de ce site. j'ai mis des x mais tu peux le lire comme

http://localhost/aaaa/bbbb/

"RewriteBase /" correspondant à "http://localhost/", c'est pour remonter à la racine.

(Mais ces chemins sont interprétés par apache, "RewriteBase /" correspondra à localhost/ pour nous en tant que client, mais, dans une config classique, la vraie traduction effectuée par apache est celle qui donne le chemin du Document Root.

Mais bon, ma ligne ne sert à rien en fait, on peut faire comme si elle n'était pas là.

J'essaierai \. pour les points, c'est vrai que j'ai zappé l'antislash. ça concerne que le chemin /admin/ et celle-ci réagit normalement.

Mais en attendant, ce que je ne comprends vraiment pas, c'est que quand je commente la dernière ligne, les différentes requêtes que je peux faire sont réécrites dans les bonnes correspondances d'expression régulières.

Si je demande http://localhost/xxxx/xxxx/bonjour, c'est bien cette règle qui est interprétée:
RewriteRule ^([-a-zA-Z]+)$ controls.php?page=$1&e=lol [L]

SI je demande http://localhost/xxxx/xxxx/ , c'est logiquement celle-ci qui devrait répondre :
RewriteRule ^$ controls.php?page=index&e=300 [L]
et c'est le cas.

DOnc je vois pas pourqoi ma dernière ligne est interprétée si je ne la commente pas : c'est pourquoi je pense que je n'ai pas bien saisi le fonctionnement du flag L , puisque mes regexp semblent bien vérifiée.


o'
0
niahoo Messages postés 247 Date d'inscription lundi 24 décembre 2007 Statut Membre Dernière intervention 23 mai 2010 19
23 mai 2010 à 18:01
up ..

exemple encore plus simple :
RewriteEngine On
RewriteRule ^([a-z]+)$ index.php?page=$1 [L] 
RewriteRule ^(.*)$ index.php?page=index


si je tape juste /test ,
la deuxieme règle s'applique ...
0