13
Nov/09
0

Redirection nginx des vues par locale

L’internationalisation demande à ce que l’on serve des fichiers différents selon la locale sélectionnée. Ces fichiers sont générés par une pré-génération via Rake.

Maintenant, il faut être capable de choisir le fichier à fournir à l’utilisateur. Nous utiliserons principalement la sélection de la locale par paramètre d’URL, ceci afin de respecter des principes REST d’auto-suffisance des URL et parce que les accès aux ressources se font principalement par Ajax et sont donc cachées à l’utilisateur et automatisable simplement.

les URL seront donc de la forme suivante :

  • http: /view.html -> page avec locale par défaut -> filesys: /www/view_en.html
  • http: /view.html?lang=fr -> page traduite en français -> filesys: /www/view_fr.html

Pour cela, il est nécessaire de traduire un paramètre de requête en un chemin dans le système de fichiers directement au niveau du serveur web : nginx nous fourni un module de réécriture comme sur tout autre serveur.

On le met en oeuvre de la manière suivante :

 
http {
  server {
1   rewrite_log on;
2  if ($args  ~* lang=(..)) {
3     set $lang $1;
4     rewrite ^(.+)\.html$ $1_$lang.html last;
    }
 
...
  1. On active le moteur de réécriture (déjà intégré)
  2. On utilise un expression régulière avec capture afin de savoir si l’URL contient un paramètre de choix de langue,
  3. on récupère la langue (limitée à 2 caractères, donc fra sera tronqué en fr)
  4. on réécrit le nom de la ressource pour inclure la locale

Remarque : la réécriture ne concerne pas les paramètres, donc la règle de réécriture est correcte et conserve les paramètres.

Filed under: Config, nginx
26
Oct/09
0

Debug du mode rewrite sous nginx

Pour voir ce qui est fait au niveau du module rewrite de nginx, ne pas oublier de modifier la configuration de la manière suivante :

décommenter la trace de type notice :

error_log  logs/error.log  notice;

déclencher le mode rewrite au niveau du serveur HTTP :

http {
  rewrite_log on;

Les étapes de réécriture apparaissent dans le fichier de trace /etc/nginx/logs/error.log.

Filed under: Config, nginx