URL Rewriting : le paramètre de la langue

  • Auteur de la discussion Auteur de la discussion fredm
  • Date de début Date de début
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
 
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).
 
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...
 
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 …
 
Merci quand même. En tout cas je suis sur la voie. Il me reste plus qu'à demander cette fonction à un initié en ASP.
 
De mémoire :

Code:
<a href="/<%
if session("current_lang_selected") <> 'fr' then
  response.write(session("current_lang_selected") & '/')
end if
%>"
 
Eh non :? c'est syntax error au niveau du quote 'fr'
Code:
if session("current_lang_selected") <> 'fr' then
---------------------------------------^
 
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
%>"
 
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 ?
 
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 ;)
 
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=
 
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.
 

➡️ 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