Aide Svp, pour une règle de ré-écriture

WRInaute discret
Bonjour,
j'ai besoin d'aide Svp pour une règle de ré-écriture d'URL.

Actuellement, j'ai cette règle:
Code:
RewriteRule ^([a-z0-9\-]+)/lang=([en]+)$ post_page?url=$1&lang=$2 [L]

Donc, si je tape ceci:
Code:
http://localhost/site/page-test/lang=en
ça fonctionne, mon GET "lang=en" est pris en compte.


Mais je souhaite avoir des URL comme ceci (remplacer le dernier "/" de l'URL ci dessus, par un "?" :
Code:
http://localhost/site/page-test?lang=en

J'ai donc essayé cette règle:
Code:
RewriteRule ^([a-z0-9\-]+)?lang=([en]+)$ post_page?url=$1&lang=$2 [L]

Et si je tape ceci:
Code:
http://localhost/site/page-test?lang=en
ça fonctionne pas, mon GET "lang=en" n'est pas pris en compte.

Comment résoudre ce problème SVP?
Merci beaucoup
 
WRInaute accro
C'est normal car après le ? ça ne fait plus partie de l'url mais c'est la QUERY String

Il faut utiliser RewriteCond %{QUERY_STRING} au lieu de RewriteCond %{REQUEST_URI}
 
WRInaute discret
indigene a dit:
C'est normal car après le ? ça ne fait plus partie de l'url mais c'est la QUERY String

Il faut utiliser RewriteCond %{QUERY_STRING} au lieu de RewriteCond %{REQUEST_URI}

Ok merci.
J'ai donc essayé ce code:
Code:
RewriteCond %{QUERY_STRING}
RewriteRule ^([a-z0-9\-]+)?lang=([en]+)$ post_page?url=$1&lang=$2 [L]
ça me fait une 500 Interval Error.
 
WRInaute discret
indigene a dit:
Parce que tu n'as pas mis de cond sur ta ligne rewritecond

Exemple pour rediriger toutes les url de type http://www.example.com/page1.html?455566 vers http://www.example.com/page1.html

RewriteCond %{QUERY_STRING} ^([0-9]+)$
RewriteRule (.*) /$1? [R=301]
Ok merci.
Alors, comment je doit faire pour ce que je veux?
j'ai essayé ceci:
Code:
RewriteCond %{QUERY_STRING} ^lang=(.*)$
RewriteRule (.*) /lang=$1 [R=301]
Et ça ne marche toujours pas.
merci
 
WRInaute accro
Bon alors on reprend depuis le départ.
Rewritecond c'est ta condition.
Il faut préciser la condition pour laquelle la règle va s'exécuter.
^ indique que ça commence par
$ indique qu'il n'y a rien d'autre après.

La ligne revriterule c'est la règle de redirection.
Dans ton premier post tu indiquais que tu voulais rediriger vers post_page?url=$1&lang=$2
et maintenant tu indiques que tu veux rediriger toutes les url vers vers /lang=$1

Donc si je suis la règle que tu as écris, pour l'url www.example.com/index.html?lang=en
tu vas sans doute faire une redirection ves la page : www.example.com/lang=index.html

Je te propose d'écrire d'abord en français tes règles de redirection avant de les traduire en .htaccess

SI ma querystring commence par lang=en
ALORS je redirige n'importe quelle url vers /post_page?url=monurl&lang=en
SI ma querystring commence par lang=fr
ALORS je redirige n'importe quelle url vers /post_page?url=monurl&lang=fr

Ca devrait être plus simple à comprendre maintenant, il suffit de transposer et d'indiquer le bon code de redirection et les bons paramètres (L notamment)
 
WRInaute discret
Ok merci.

au lieu d'avoir ceci:
Code:
http://localhost/site/page-test/lang=en
avec cette regle:
Code:
RewriteRule ^([a-z0-9\-]+)/lang=([en]+)$ post_page?url=$1&lang=$2 [L]

Je veux des URL comme ceci:
Code:
http://localhost/site/page-test?lang=en
Mais je ne sais pas quoi mettre comme règle à la place;
Je précise que je suis débutant.

Je viens d'essayer ceci:
Code:
RewriteCond %{QUERY_STRING} lang=(.*)$
RewriteRule ^([a-z0-9\-]+) post_page?url=$1&lang=en [L]
Mais ça ne marche pas.
 
WRInaute accro
Je vais être un peu plus explicite et mettre des parenthèses
Tout ce qui est entre parenthèse correspond à une variable. La première parenthèse c'est $1, la seconde c'est $2, et ainsi de suite.

Voici ce que ça donnerait en français :
Code:
SI ma querystring commence par lang=en
ALORS je redirige (n'importe quelle url) vers /post_page?url=$1l&lang=en
SI ma querystring commence par lang=fr
ALORS je redirige (n'importe quelle url) vers /post_page?url=$1&lang=fr
A toi de le traduire en .htaccess

Et tu ne t'occupes pas de ce qu'il y a après le ? dans la rewriterule, ça tu l'as déjà testé dans la condition donc ce qui se trouve après le ? c'est forcément la même chose que ce que tu as mis dans la condition.
 
WRInaute discret
indigene a dit:
Je vais être un peu plus explicite et mettre des parenthèses
Tout ce qui est entre parenthèse correspond à une variable. La première parenthèse c'est $1, la seconde c'est $2, et ainsi de suite.

Voici ce que ça donnerait en français :
Code:
SI ma querystring commence par lang=en
ALORS je redirige (n'importe quelle url) vers /post_page?url=$1l&lang=en
SI ma querystring commence par lang=fr
ALORS je redirige (n'importe quelle url) vers /post_page?url=$1&lang=fr
A toi de le traduire en .htaccess

Et tu ne t'occupes pas de ce qu'il y a après le ? dans la rewriterule, ça tu l'as déjà testé dans la condition donc ce qui se trouve après le ? c'est forcément la même chose que ce que tu as mis dans la condition.
Ok merci beaucoup.
Code:
# SI ma querystring commence par lang=en
RewriteCond %{QUERY_STRING} lang=en$
# ALORS je redirige (n'importe quelle url) vers /post_page?url=$1l&lang=en
RewriteRule ^(.*) post_page?url=$1&lang=en [L]
c'est ça? je suis en bonne vois? ou pas du tout? car ça ne marche toujours pas...
Peut tu me donner la solution stp?
merci
 
WRInaute accro
ça me parait déjà beaucoup mieux
Mais je ne suis pas un expert non plus en redirection.
Peut-être qu'il ne faudrait pas mettre lang=en$ mais ^lang=en
Peut-être qu'il ne faudrait pas mettre ^(.*) mais (.*)
Peut-être qu'il faut mettre le / que tu as supprimé et que pourtant j'avais bien mis dans mon exemple : /post_page au lieu de post_page
Ou alors utiliser des adresses complètes avec http://www.example.com/post_page et la suite

Mais tu es vraiment sur la bonne voie, je dirais même que tu y es presque
 
WRInaute discret
indigene a dit:
ça me parait déjà beaucoup mieux
Mais je ne suis pas un expert non plus en redirection.
Peut-être qu'il ne faudrait pas mettre lang=en$ mais ^lang=en
Peut-être qu'il ne faudrait pas mettre ^(.*) mais (.*)
Peut-être qu'il faut mettre le / que tu as supprimé et que pourtant j'avais bien mis dans mon exemple : /post_page au lieu de post_page
Ou alors utiliser des adresses complètes avec http://www.example.com/post_page et la suite

Mais tu es vraiment sur la bonne voie, je dirais même que tu y es presque
Ok merci.
J'ai essayé en mettant le "/", et les autres truc que tu ma dit.
Mais ça ne marche toujours pas.
Si quelqu'un aurai la solution?
Merci d'avance
 
Discussions similaires
Haut