URL rewriting fonctionne avec une variable pas plus

  • Auteur de la discussion Auteur de la discussion bing
  • Date de début Date de début
Nouveau WRInaute
Bonjour
Après avoir lu ce tutoriel https://www.webrankinfo.com/dossiers/techniques/tutoriel-url-rewriting
j'ai besoin de votre aide parce que certain point ne marche pas chez moi.
Ci-dessous mon fichier .htaccess

Code:
RewriteRule ^([a-zA-Z0-9_].+)\.html$   /index.php?page=$1 [L]
											 
RewriteRule ^([a-zA-Z0-9_].+)-([a-zA-Z0-9_].+)-([a-zA-Z0-9_].+)\.html$   /index.php?page=$1&ID=$2&categorie=$3 [L]

la 1ère réécriture fonctionne sans problème mais la seconde ne fonctionne pas. j'aimerai savoir pourquoi SVP
 
WRInaute occasionnel
Tout simple :
le htaccess se lit du haut vers le bas. Donc, si il trouve une règle de réécriture qui correspond, il arrête la lecture du htaccess et fait fonctionner directement la règle trouvée.

Ce qui signifie que tu dois juste inverser tes deux règles dans le htaccess pour que la règle 2 :
Code:
RewriteRule ^([a-zA-Z0-9_].+)-([a-zA-Z0-9_].+)-([a-zA-Z0-9_].+)\.html$   /index.php?page=$1&ID=$2&categorie=$3 [L]
s'exécute si l'URL est de la forme nomdepage-12-nomdelacategorie.html .

Si par contre, il ne trouve pas de correspondance avec la règle 2, à savoir par exemple nomdelapage.html, il testera la correspondance avec la règle d'après, soit :
Code:
RewriteRule ^([a-zA-Z0-9_].+)\.html$   /index.php?page=$1 [L]

Dans ton cas, tu dois donc écrire :
Code:
RewriteRule ^([a-zA-Z0-9_].+)-([a-zA-Z0-9_].+)-([a-zA-Z0-9_].+)\.html$   /index.php?page=$1&ID=$2&categorie=$3 [L]

RewriteRule ^([a-zA-Z0-9_].+)\.html$   /index.php?page=$1 [L]

VOilà, tiens nous au jus ;)
 
Nouveau WRInaute
Quand j'inverse, aucun des 2 règles ne fonctionne.

j'aimerai aussi rappeler que la variable "page" n'a pas la même valeur dans les deux règles
 
WRInaute occasionnel
Alors tu vas devoir donner plus d'incications à ton URL réécrite pour que le htaccess comprenne qui est qui :

exemple :
pour cette règle,
Code:
/index.php?page=$1&ID=$2&categorie=$3

je pense que tu devrais avoir une URL finale du type :
Code:
([a-zA-Z0-9_].+)-id([a-zA-Z0-9_].+)-cat([a-zA-Z0-9_].+)\.html$

Ce qui donnerait :
Code:
([a-zA-Z0-9_].+)-id([a-zA-Z0-9_].+)-cat([a-zA-Z0-9_].+)\.html$   /index.php?page=$1&ID=$2&categorie=$3

Et pour ta règle 1 resterait identique :
Code:
RewriteRule ^([a-zA-Z0-9_].+)\.html$   /index.php?page=$1 [L]

Le but de la manoeuvre est de faire comprendre au htaccess que s'il trouve -id et -cat ça correspond à la règle
Code:
([a-zA-Z0-9_].+)-id([a-zA-Z0-9_].+)-cat([a-zA-Z0-9_].+)\.html$   /index.php?page=$1&ID=$2&categorie=$3

sinon, ça correspond à la suivante.
 
Nouveau WRInaute
Tout d'abord un grand merci Djibou_Te@M pour ton assistance.

Après toutes ces modifications je reçois maintenant un page d'erreur sur les 2 règles
The requested URL /nomdepage-67-nomcategorie.html was not found on this server.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
 
Nouveau WRInaute
rectification
cette règle fonctionne
Code:
RewriteRule ^([a-zA-Z0-9_].+)-([a-zA-Z0-9_].+)-cat-([a-zA-Z0-9_].+)-([a-zA-Z0-9_].+)\.html$   /index.php?page=$1&ID=$2&categorie=$3&titre=$4 [L]

mais la 2ème règle
Code:
RewriteRule ^([a-zA-Z0-9_].+)\.html$   /index.php?page=$1 [L]
me renvois une page d'erreur.
et quand j'inverse c'est la règle qui est en tête qui fonction
 
Nouveau WRInaute
Merci spout pour tes liens elles sont intéressantes mais je pense que si je les suis les choses risquent de tout se gâté dans ma tête
 
Discussions similaires
Haut