Dans le cadre d’un projet d’archéologie numérique, j’ai trouvé un répertoire de serveurs Web contenant des fichiers datant de 2001 contenant une collection particulière de fichiers index.html
et portant des noms se terminant par deux codes de lettre de langues différentes et de jeux de caractères de langue, c.-à-d.
index.html.ca index.html.ja.jis index.html.ru.iso-ru
index.html.cz index.html.kr.iso-kr index.html.ru.koi8-r
index.html.de index.html.lb.utf8 index.html.ru.ucs2
index.html.dk index.html.nl index.html.ru.ucs4
index.html.ee index.html.nn index.html.ru.utf8
...
Comment configurer Apache moderne pour qu'il serve différentes pages statiques en fonction de la valeur de Accept-Language
en-tête?
Ces fichiers sont presque certainement destinés à être servis via négociation de contenu Apache . Comme il ne semble pas exister de fichier .var
destiné à servir de mappage de type explicite, et comme les extensions de nom de fichier correspondent aux codes de langage et de jeu de caractères standard, elles sont probablement destinées à être utilisées avec le code implicite MultiViews mécanisme.
Pour activer MultiViews pour le répertoire contenant ces fichiers, ajoutez la directive suivante dans un fichier .htaccess de ce répertoire (ou dans une section <Directory> correspondante de la configuration globale d'Apache):
Options +MultiViews
Cela permettra à Apache de résoudre automatiquement les demandes de fichiers inexistants en ajoutant des extensions supplémentaires basées sur les préférences de langue, de type MIME et de jeu de caractères indiquées par les en-têtes HTTP Accept
, Accept-Charset
et Accept-Language
. Par exemple, une demande de index.html
pourrait amener Apache à renvoyer le contenu de index.html.de
ou index.html.ja.jis
ou index.html.ru.utf8
, en fonction de la ou des langues préférées configurées dans l'utilisateur. navigateur.
Notez que, outre la négociation de contenu, vous devez également fournir aux utilisateurs un moyen de sélectionner explicitement la version de la page qu'ils préfèrent. Lorsque vous utilisez MultiViews, cela peut être aussi simple que de fournir des liens directs vers les pages traduites avec le code de langue inclus.
Je recommanderais d'émettre des redirections afin que les moteurs de recherche puissent afficher des URL uniques pour chaque langue. Voici quelques règles de réécriture que vous pourriez utiliser dans votre fichier . Htaccess:
RewriteCond %{HTTP:Accept-Language} ^de [NC]
RewriteRule ^index.html$ /index.html.de [L,R=302]
RewriteCond %{HTTP:Accept-Language} ^ru [NC]
RewriteRule ^index.html$ /index.html.ru.utf8 [L,R=302]
...
NC
n'est "pas de cas" (insensible à la casse)L
est "dernier" (arrête le traitement des autres règles)R=302
est une redirection temporaireVous aurez toujours besoin d'un index.html
par défaut pour les navigateurs qui n'envoient pas l'en-tête avec une valeur reconnue.