Htaccess (ou php) qui modifie l'url en fonction de HTTP_ACCEPT_LANGUAGE

WRInaute impliqué
Bonjour,

je souhaite mettre en place la modification de l'url en fonction de HTTP_ACCEPT_LANGUAGE.

Si l'utilisateur se connecter avec un HTTP_ACCEPT_LANGUAGE = fr on affiche l'url suivant http://monsite.com

Si l'utilisateur se connecte avec un HTTP_ACCEPT_LANGUAGE = es on affiche http://es.monsite.com

Si l'utilisateur se connecte avec un HTTP_ACCEPT_LANGUAGE = pt on affiche http://pt.monsite.com

et si HTTP_ACCEPT_LANGUAGE est différent de es, fr et pt, on affiche http://en.monsite.com

J'ai également essayé directement ma page d'index.php mais cela ne fonctionne pas :

Code:
$language = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
$language = $mysqli->real_escape_string($language);

const LANGUAGES = ['be' => 'fr', 'ch' => 'fr', 'lu' => 'fr', 'fr' => 'fr', 'es' => 'es', 'pt' => 'pt''];
$language = LANGUAGES[$language] ?? 'en';

switch ($langue) { 
case 'fr': 
header ("Location: fr.monsite.com"); 
break; 
case 'es': 
header ("Location:  es.monsite.com"); 
break; 
case 'pt': 
header ("Location:  pt.monsite.com"); 
break; 
default: 
header ("Location:  en.monsite.com"); 
break; 
}

Je serais très reconnaissant de la personne qui voudra m'aider.

Merci d'avance
 
WRInaute accro
Dans ton post précédent je t'ai répondu comment faire avec les méthodes built-in de PHP.
Tes header location ne sauraient pas fonctionner comme ça, il faut qu'ils commencent par le protocole.
 
WRInaute passionné
En htaccess (à tester, j'ai pas fait) :
Code:
RewriteEngine on

RewriteCond %{HTTP:Accept-Language} (es) [NC]
RewriteRule .* http://es.monsite.com [R,L]

RewriteCond %{HTTP:Accept-Language} (fr) [NC]
RewriteRule .* http://monsite.com [R,L]

RewriteCond %{HTTP:Accept-Language} (pt) [NC]
RewriteRule .* http://pt.monsite.com [R,L]

# pour tous les autres utiliser l'anglais
RewriteRule ^$ http://en.monsite.com [R,L]

En fait ça risque de faire une redirection infinie, il faut surement rajouter des regles, bref changer le truc, mais voilà c'est juste pour te montrer que la condition HTTP:Accept-Language en htaccess est possible.
 
WRInaute impliqué
UsagiYojimbo , Oui le but étant de rediriger dans un premier temps l'utilisateur dans son language avec HTTP_ACCEPT_LANGUAGE (exemple : fr.monsite.com) mais on garde la possibilité de modifier le language si besoin est.

Spout, qu'est ce que tu veux dire par protocole ?
 
WRInaute accro
Mauvais:
PHP:
<span class="syntaxdefault"></span><span class="syntaxkeyword"><?</span><span class="syntaxdefault">php<br />header&nbsp;</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Location:&nbsp;fr.monsite.com"</span><span class="syntaxkeyword">);&nbsp;</span><span class="syntaxdefault"></span>

Bon:
PHP:
<span class="syntaxdefault"></span><span class="syntaxkeyword"><?</span><span class="syntaxdefault">php<br />header&nbsp;</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Location:&nbsp;http://fr.monsite.com"</span><span class="syntaxkeyword">);&nbsp;</span><span class="syntaxdefault"></span>
 
WRInaute impliqué
Spout, ca ne fonctionne pas mieux, meme avec le http://

Code:
const LANGUAGES = ['be' => 'fr', 'ch' => 'fr', 'lu' => 'fr', 'it' => 'it', 'fr' => 'fr', 'es' => 'es', 'pt' => 'pt', 'cn' => 'cn', 'de' => 'de'];
$language = LANGUAGES[$language] ?? 'en';

switch ($langue) { 
case 'fr': 
header ("Location: http://fr.monsite.com"); 
break; 
case 'es': 
header ("Location:  http://es.monsite.com"); 
break; 
case 'pt': 
header ("Location:  http://pt.monsite.com"); 
break; 
default: 
header ("Location:  http://en.monsite.com"); 
break; 
}
 
Discussions similaires
Haut