Expression URL rewriting

Nouveau WRInaute
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

:)
 
WRInaute accro
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
 
WRInaute accro
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
 
Nouveau WRInaute
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
 
Nouveau WRInaute
WRInaute accro
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
 
Nouveau WRInaute
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
 
WRInaute accro
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
 
WRInaute passionné
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]
 
Nouveau WRInaute
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 ? :(
 
Nouveau WRInaute
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:
 
WRInaute passionné
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]
 
Nouveau WRInaute
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:
 
Nouveau WRInaute
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