Nov/090
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; } ...
- On active le moteur de réécriture (déjà intégré)
- On utilise un expression régulière avec capture afin de savoir si l’
URL
contient un paramètre de choix de langue, - on récupère la langue (limitée à 2 caractères, donc
fra
sera tronqué enfr
) - 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.
Oct/090
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
.