Première création RewriteRule - aide

  • Auteur de la discussion Auteur de la discussion zozot
  • Date de début Date de début
Nouveau WRInaute
Bonjour à tous,
donc comme le titre l'indique, ce sont mes premiers pas dans le RewriteRule, j'ai lu différents tuto là-dessus.

Mon problème est le suivant:

Je souhaite arriver au résultat suivant grâce au rewritting :

article/titre-complexe-ou-non-3-4.html

l'url qui sera redirigée est la suivante :
index.php?page=3&etape=2&nocat=3&noart=4 [L]

ma question est : est-il possible de mettre un titre (titre-bla-bla-bla) sans qu'il soit "déclaré" dans la page en référence (exemple : index.php?titre=$titrecomplexe&page=3&etape=2&nocat=3&noart=4...) ou ma synthaxe est elle bonne ?

mon code est le suivant :
Code:
RewriteRule ^article/(-[a-z]*)-([0-9]+)-([0-9]+).\html$ index.php?page=3&etape=2&nocat=$1&noart=$2 [L]

merci à vous.
 
WRInaute occasionnel
Trois remarques :

- Tout caractère spécial ( '/', '+', '.' ... ) doit etre échappé ( rajouter un '\' devant ).

- Pour permettre l'utilisation de tirets '-' dans ton titre, tu dois l'inclure dans ta règle : [a-z-] et non pas -[a-z].

- Les variables ( valeurs qui correspondent à chaque regle de bloc entre parenthèses ) sont nommées $1, $2, $n... de gauche à droite, peu importe en vérité si tu les utilises ou pas.

Deux exemples :

- Réécrire /5-8-un-titre-blabla.html en article.php?categorie=5&article=8 :

RewriteRule ^([0-9]+)-([0-9]+)-([a-z-]+)\.html$ article.php?categorie=$1&article=$2

Ici on utilise deux variables sur trois. ( $3 contient "un-titre-blabla", mais on ne l'utilise pas )

- Réécrire /un-titre-blabla,5128,1456.html en article.php?a=5128&b=1456 :

RewriteRule ^([a-z-]+),([0-9]+),([0-9]+)\.html article.php?a=$2&b=$3

Ici, $1 n'est pas utilisée.

A noter, les expressions régulières sont gloutonnes. Ce qui signifie qu'elles essayent de matcher sur la plus longue chaine possible, et c'est une galère fréquente & vicelarde en url rewriting. Illustration :

Chaine d'entrée : Toto-est-gentil-311-812

([a-zA-Z-]+) va matcher "Toto-est-gentil-" et non pas "Toto-est-gentil"...

Sinon pour les "multiplicateurs": + signifie "au moins un" et * signifie "0 ou plusieurs".

Bon courage
 
Discussions similaires
Haut