URL Rewriting : le paramètre de la langue

WRInaute occasionnel
Bonjour

J'ai un site en 2 langues (fr et en), avec une page default.asp?lang=[fr ou en].

Grâce à ce topic je sais rediriger cette page en example.com/ pour le français et example.com/en/ pour l'anglais.

Mais dans le code, je dois écrire le terme "fr" ou "en". Actuellement le code est :
Code:
<a href="default.asp?lang=<%=session("current_lang_selected")%>"
Donc même si j'écris comme ceci, le problème est que je vais voir apparaitre example.com/fr/ :
Code:
<a href="/<%=session("current_lang_selected")%>/"
Quelqu'un pourrait me dire comment je peux solutionner le problème ?

Merci, Fred
 
WRInaute impliqué
Code:
<a href="/<%=session("current_lang_selected") == 'fr'?'':session("current_lang_selected")%>/"

Juste pour te montrer le principe.
Le mieux est de créer une fonction spécifique te permettant de récupérer la langue ou rien (si c'est fr).
 
WRInaute occasionnel
Merci. Je suis d'accord sur le principe mais il y a une erreur de syntaxe sur cette ligne et je sais pas la corriger...
 
WRInaute impliqué
Mince, avec l'habitude, je n'ai pas fait attention que ce n'était pas du PHP mais de l'ASP :D

Désolé, je ne pourrai pas t'aider sur ce coup …
 
WRInaute occasionnel
Merci quand même. En tout cas je suis sur la voie. Il me reste plus qu'à demander cette fonction à un initié en ASP.
 
WRInaute accro
De mémoire :

Code:
<a href="/<%
if session("current_lang_selected") <> 'fr' then
  response.write(session("current_lang_selected") & '/')
end if
%>"
 
WRInaute occasionnel
Eh non :? c'est syntax error au niveau du quote 'fr'
Code:
if session("current_lang_selected") <> 'fr' then
---------------------------------------^
 
WRInaute occasionnel
Merci, en fait ça marche super, c'est juste les quotes à remplacer par les doubles-quotes:
Code:
href="/<%
if session("current_lang_selected") <> "fr" then
  response.write(session("current_lang_selected") & "/")
end if
%>"
 
WRInaute occasionnel
Je galère depuis des heures à cause de ce paramètre de langue :evil:
En fait je voulais changer ceci pour bien séparer le paramètre le langue.
Code:
example.com/template.asp?lang=en&param1=x&param2=y&...
en celà
Code:
example.com/en/template.asp?&param1=x&param2=y&...
J'ai créé ces redirections :
Code:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-z]{2})\/$ /default.asp?lang=$1 [L]   >>> ok
RewriteRule ^([a-z]{2})\/(+*)$ /$2&lang=$1 [L]   >>> ko
Et bien entendu ça ne marche pas pour la dernière règle (pour les pages "template.asp")... alors qu'à titre d'exemple la règle suivante marche bien pour me faire le /en/ que je veux:
Code:
RewriteRule ^([a-z]{2})/fiche-([0-9]+).html(.*)$ /template.asp?page=fiche&idfiche=$2&lang=$1$3 [L] [L]
Pourriez-vous m'aider sur ce problème ?
 
WRInaute impliqué
Les paramètres d'URL ne sont pas "capturable" dans un RewriteRule. Si tu veux que ta redirection transmettent les paramètres à l'adresse redirigée, il faut mettre QSA :

Code:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-z]{2})/$ /default.asp?lang=$1 [L,QSA]
RewriteRule ^([a-z]{2})/(+*) /$2?lang=$1 [L,QSA]

Pourquoi avais-tu mis un \ devant les / ? Normalement, ce n'est pas utile.

Essaie ce code, ça devrait faire avancer le chmiblic ;)
 
WRInaute occasionnel
Ca ne marche pas :(
(il y avait une erreur dans ta ligne, j'ai remplacé "?" par "&"):
Code:
RewriteRule ^([a-z]{2})/(+*) /$2&lang=$1 [L,QSA]
Concrètement, le but est de faire correspondre (par exemple, car le nombre de paramètres est variable):
/template.asp?page=LISTE&idsupport=1&idtype=8&lang=en
à
/en/template.asp?page=LISTE&idsupport=1&idtype=8


Les paramètres d'URL semble être capturables sans le QSA, vu que cette ligne marche bien. Tous les paramètres sont bien dans le $3:
Code:
RewriteRule ^([a-z]{2})/fiche-([0-9]+).html(.*)$ /template.asp?page=fiche&idfiche=$2&lang=$1$3 [L]
voir ici: http://www.agenceducapdantibes.com/en/fiche-458687.html&idtype=12&budg ... =&curpage=
 
WRInaute impliqué
Dans l'adresse que tu fournis, je ne suis pas sur que ces paramètres soit des Query String.
Les Query String sont définis par la séparation de l'adresse et de ces derniers par un point d'interrogation. Hors, je n'en vois pas dans ton lien.

Je te confirme aussi que c'est bien "?" et non pas "&" qu'il faut mettre.

Je viens de voir une erreur dans le code, ce n'est pas (+*) mais (.*) qu'il faut mettre :
Code:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-z]{2})/$ /default.asp?lang=$1 [L,QSA]
RewriteRule ^([a-z]{2})/(.*) /$2?lang=$1 [L,QSA]

De plus, si tu veux vraiment contrôler les langues utilisables, spécifie les :
Code:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(fr|en)/$ /default.asp?lang=$1 [L,QSA]
RewriteRule ^(fr|en)/(.*) /$2?lang=$1 [L,QSA]

De cette manière, si quelqu'un met une langue non supportée, tu peux gérer un 404.
 
Discussions similaires
Haut