recupérer des $_GET apres un url rewriting

  • Auteur de la discussion Auteur de la discussion aloade
  • Date de début Date de début
Nouveau WRInaute
Bonjour,

je vais rentrer dans le vif du sujet car c'est un gros problème ^^ et vous m'avez l'air bien calé dessus :oops:

alors j'ai un site avec plusieurs sous domaine ou je fais des redirection sans problème. Le soucis c'est que je veux faire un site en plusieurs langue donc j'ai eu comme idée d'utiliser un sous domaine par langue (avec une variable get renvoyé pour le traitement dans les pages), par exemple:
htp//fr.site.net -> htp//fr.site.net/?lang=fr
htp//en.site.net -> htp//fr.site.net/?lang=en
htp//es.site.net -> htp:/fr.site.net/?lang=es

tous vont vers htp//fr.site.net)
sachant que les fichiers physiquement sont stocké comme :
htp//www.site.net/domain/fr/,
htp//www.site.net/domain/es/,
htp//www.site.net/domain/es/,
etc

jusque la pas de soucis, le problème vient que pour certaines page de fr.domaine.net j'utilise également des variables en $_GET (je récupère la variable passée en adresse par exemple htp//fr.site.net/variable) et c'est la que ca coince il me renvoie les $_GET de la redirection de sous domaine, par exemple :
sans la redirection selon la langue (donc une redirection normal de sous domaine pas de soucis j'ai bien:
htp//fr.site.net/variable -> je recup $_GET[var] == 'variable'

par contre avec la redirection par langue j'ai :
htp//fr.site.net/?var1=1 -> je recup $_GET[lang] == fr mais $_GET[var] est null !

voila en espérant être assez clair ^^

ci dessous ce sont mes fichiers .htaccess, en vert c'est le code ajouté

celui a la racine du site htp//www.site.net:
RewriteEngine On

RewriteCond %{HTTP_HOST} ^es\.site\.net(/(.*))?$
RewriteRule ^(.*)$ /domain/site/$1?lang=es [L]

RewriteCond %{HTTP_HOST} ^en\.site\.net(/(.*))?$
RewriteRule ^(.*)$ /domain/site/$1?lang=en [L]

RewriteCond %{HTTP_HOST} ^fr\.site\.net(/(.*))?$
RewriteRule ^(.*)$ /domain/site/$1?lang=fr [L]


# redirection des sous-domaines
RewriteCond %{REQUEST_URI} !^/domain
RewriteCond %{HTTP_HOST} ^([^.]*)\.?[^.]+\.[^.]+$ [NC]
RewriteCond %1 !^www$ [NC]
RewriteRule ^(.*)$ /domain/%1/$1

et le .htaccess placé à htp//www.site.net/fr/ :
RewriteEngin on

RewriteCond %{QUERY_STRING} (.*)
RewriteRule ^([a-z0-9])$ /index.php?lang=%1&var=$1 [NC,L]
 
WRInaute impliqué
Effectivement ça peut paraitre bizarre au début...
Là ou tu as [L] , met [QSA,L]
QSA = Query String Attempt => c'est ce qui spécifie de traiter la fin de l'url (ce qui se trouve après le '?')
 
Nouveau WRInaute
Re: apres un url rewriting

merci de la réponse (je pensais que la longueur de mon message allait faire fuir tout le monde ^^)

et bien ca m'étonne agréablement ca marche très bien :)
en plus y'a juste a modifier le .htacccess de htp//www.site.net/fr/
RewriteEngin on

RewriteCond %{QUERY_STRING} (.*)
RewriteRule ^([a-z0-9])$ /index.php%1&var=$1 [NC,L]
(sinon on voit apparaitre ?lang=lang=fr&va... :p)

merci beaucoup dans ce cas ^^

en hors sujet; c'est vraiment pas facile de trouver des explications clair sur ce type de programme je l'utilise depuis pas mal de mois et j'ai découvert sur ce site l'utilité dans es RewriteCond du premier paramètre ;o
avec ce que tu m'as dis je vais pouvoir me plonger sur le paramètre optionel aussi :p

merci encore ! :)

edit:
petit correction sur le code c'est
/index.php?var=$1
et non
/index.php%1&var=$1
apparement avec QSA ca réecrit sur les htaccs fils :p (l'erreur renvoyé est un 404 :) )
 
Discussions similaires
Haut