Expression URL rewriting

Bonjour,

Je n'ai pas encore testé mes URL sur mon serveur, j'aurai voulu savoir si ce que j'avais fait était bon.

Je voudrais transformer mes URL de cette façon:

www.site.fr/index.php?page=toto&lang=fr => /fr/toto.html
www.site.fr/index.php?page=toto&ref=reference&lang=fr => /fr/toto-reference.html
www.site.fr/index.php?page=toto&choix=0&lang=fr => /fr/toto-0.html

J'ai donc fait cela:

Code:
RewriteRule ^([a-z]*)/([a-z]*)\.html$
/index.php?page=$1&lang=$2 [L]

RewriteRule ^([a-z]*)/([a-z]*)-([a-z]*)\.html$
/index.php?page=$1&ref=$2&lang=$3 [L]

RewriteRule ^([a-z]*)/([a-z]*)-([a-z]*)\.html$
/index.php?page=$1&choix=$2&lang=$3 [L]

Par contre dans mes variables, il peut y avoir des caractères comme - ou _ comment les rajouter dans mes expressions ??

Sinon pensez vous que ça fonctionne ?

Merci d'avance

:)
 
Bonjour,

Ton code ne correspond pas à ta demande: des articles.php d'un côté et des index.php de l'autre; des .html d'un côté seulement. Il faudrait que tu fasses un premier nettoyage. :wink:

Pour des caractères qui peuvent être, à la fois, des minuscules, des tirets et des soulignés, prends : [a-z_-]

Jean-Luc
 
Code:
RewriteRule ^([a-z]*)/([a-z_-]*)\.html$ /index.php?page=$2&lang=$1 [L]
RewriteRule ^([a-z]*)/([a-z]*)-([0-9]*)\.html$ /index.php?page=$3&ref=$1&lang=$2 [L]
RewriteRule ^([a-z]*)/([a-z_-]*)-([0-9]*)\.html$ /index.php?page=$2&choix=$3&lang=$1 [L]

Pour la ligne avec "/fr/toto-reference.html", il y a un problème insoluble, si un tiret peut être présent à la fois dans "toto" et dans "reference". Si tu as "/fr/abc-def-ghi.html", comment savoir si c'est
"toto" = "abc-def" et "reference" = "ghi"
ou
"toto" = "abc" et "reference" = "def-ghi"
?

Jean-Luc
 
Normalement, dans reference il n'y a pas de - , les - sont seulement pour page.

Par contre, quelle est l'expression pour exprimer tous les caracteres min et maj + les - ou les _ + les chiffres ??


Merci
 
Il y a avait des erreurs dans ma deuxième ligne. Essaie plutôt comme ceci:
Code:
RewriteRule ^([a-z]*)/([a-zA-Z_-0-9]*)\.html$ /index.php?page=$2&lang=$1 [L] 
RewriteRule ^([a-z]*)/([a-zA-Z_-0-9]*)-([a-z]*)\.html$ /index.php?page=$2&ref=$3&lang=$1 [L] 
RewriteRule ^([a-z]*)/([a-zA-Z_-0-9]*)-([0-9]*)\.html$ /index.php?page=$2&choix=$3&lang=$1 [L]

Ceci suppose que "reference" est toujours une suite de minuscules et "choix" est toujours un nombre.

Jean-Luc
 
Alors, j'ai effectué des tests avec wampserver:

J'ai essayé :
RewriteRule ^test.html$ test.php [L]
et cela marchait

Par contre j'ai essayé:
RewriteRule ^([a-z]*)/([a-zA-Z_-0-9]*).html$ /index.php?page=$2&lang=$1 [L]

avec: fr/accueil.html
et j'obtiens une erreur 500

Savez vous d'où cela peut venir ?

Merci d'avance
 
Essaie comme ceci:
Code:
Options +FollowSymlinks
RewriteEngine on 
RewriteRule ^([a-z]*)/([a-zA-Z_-0-9]*).html$ /index.php?page=$2&lang=$1 [L]
Jean-Luc
 
le tiret est un caractère spécial entre les crochets. Il faut le mettre a la fin. il fallait m'écouter :wink:
Code:
RewriteRule ^([a-z]*)/([a-zA-Z0-9_-]*)\.html$ /index.php?page=$2&lang=$1 [L]
ou mieux :
Code:
RewriteRule ^([a-z]*)/([\w-]*)\.html$ /index.php?page=$2&lang=$1 [L]
 
webmasterlamogere a dit:
le tiret est un caractère spécial entre les crochets. Il faut le mettre a la fin. il fallait m'écouter :wink:
Code:
RewriteRule ^([a-z]*)/([a-zA-Z0-9_-]*)\.html$ /index.php?page=$2&lang=$1 [L]
ou mieux :
Code:
RewriteRule ^([a-z]*)/([\w-]*)\.html$ /index.php?page=$2&lang=$1 [L]

J'ai fait comme ça, je n'ai plus l'erreur 500 mais une 404 qui me dit:
The requested URL /index.php was not found on this server.

j'ai tapé ceci:
http://localhost/site/fr/accueil.html

Je ne comprends pas pourquoi ? :(
 
en fait mon site (dont index.php) se trouve dans le répertoire (site) qui est dans le répertoire www de wampserver.

J'ai essayé ça:
Code:
RewriteBase /site
RewriteRule ^([a-z]*)/([\w-]*)\.html$ /index.php?page=$2&lang=$1 [L]

et ça n'a rien changé, il ne trouve pas index.php :roll:
 
c'est soit ca :
Code:
RewriteBase /site
RewriteRule ^([a-z]*)/([\w-]*)\.html$ index.php?page=$2&lang=$1 [L]
soit ca :
Code:
RewriteRule ^([a-z]*)/([\w-]*)\.html$ /site/index.php?page=$2&lang=$1 [L]
 
webmasterlamogere a dit:
c'est soit ca :
Code:
RewriteBase /site
RewriteRule ^([a-z]*)/([\w-]*)\.html$ index.php?page=$2&lang=$1 [L]
soit ca :
Code:
RewriteRule ^([a-z]*)/([\w-]*)\.html$ /site/index.php?page=$2&lang=$1 [L]


Merci ,c'est bon ça fonctionne :lol:
 
Alors, j'ai mis le site en ligne et ça ne marchait plus :cry: :cry:
J'obient une erreur 404 :
The requested URL /fr/accueil.html was not found on this server.

J'ai bien sur modifier mon .htaccess comme ceci:
Code:
RewriteRule ^([a-z]*)/([\w-]*)\.html$ /index.php?page=$2&lang=$1 [L]
RewriteRule ^([a-z]*)/$ /index.php?lang=$1 [L]
RewriteRule ^([a-z]*)/([\w-]*)/([\w-]*)-([0-9]*)\.html$ /index.php?page=$2&nom=$3&id=$4&lang=$1 [L]

Je ne comprend plus rien :cry:

PS: Je suis chez OVH start 5GO
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut