我有以下代码:
test.php的
<?php
if(empty($_GET['lang'])){
$user_language = explode("-",$_SERVER['HTTP_ACCEPT_LANGUAGE']);
$language = $user_language[0];
header('Location: http://'.$language.'.localhost'.$_SERVER['REQUEST_URI']);
}
else{
$lang = $_GET['lang'];
$content = array("en"=>"This is a test.","it"=>"Questo è un test.");
echo $content[$lang];
}
?>
的.htaccess
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^\.localhost$
RewriteRule (.*) - [QSA,E=LANG:%1]
RewriteRule (.*) $1?lang=%{ENV:LANG} [QSA]
如果未定义$ _GET ['lang'],请从浏览器发送的标题中获取用户的语言,并将其重定向到与其语言对应的子域:子域应与$ _GET ['lang']重合。 / p>
通过访问localhost / test.php,我被重定向到正确的子域,但重定向无休止地循环。 另外,如果我访问en.localhost / test.php并且我的语言是意大利语,我会在循环之前重定向到it.localhost / test.php。
我该如何解决这个问题?
答案 0 :(得分:1)
您可以使用:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP:Accept-Language} ^([a-z]{2}) [NC]
RewriteRule ^ - [E=LANG:%1]
RewriteCond %{QUERY_STRING} !(?:^|&)lang= [NC]
RewriteCond %{HTTP_HOST} ^(?:[^.]+\.)?(localhost)$
RewriteRule (.*) http://%{ENV:LANG}.%1/$1?lang=%{ENV:LANG} [QSA,L,R=302]
<强> test.php的强>:
<?php
$lang = $_GET['lang'];
$content = array("en"=>"This is a test.","it"=>"Questo è un test.");
echo $content[$lang];
?>