我有一个使用两种语言(希伯来语和英语)的 WordPress 网站,我需要它根据浏览器语言进行重定向。我正在使用 qTranslate 插件来创建两种语言的内容。这个插件也有一个重定向功能,但它只为主页创建一个重定向,我需要对内部页面和主页进行重定向。
另一位开发人员为我编写了这段代码来创建重定向,但由于某种原因,它创建了一个有趣的重定向。它仅在将语言切换为希伯来语时发生,然后离开站点并尝试直接进入http://domain.com/en/
并将您重定向到http://domain.com/domain.com/
(切换到英语时不会发生)。
我尝试使用为希伯来语创建重定向的“标题(位置:)”,但无法弄清楚如何使其工作 - 我尝试使用完整路径而不是相对路径,或删除和之间的“/ $_SERVER['SERVER_NAME']
”$_SERVER['REQUEST_URI']
但得到递归 url 或带有双“/”的 url(http://domain.com//
也适用于内部页面http://domain.com//page
)。
网址结构为:
- domain.com/ 用于希伯来语
- domain.com/en/ 英文版
并且在切换语言时,将添加参数 $lang=en 或 $lang=he。
希望这是有道理的,非常感谢!
这是负责重定向的代码:
<?php
if (!isset($_COOKIE["uln"])) :
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
setcookie('uln', $lang, time()+86400*365, '/', '.domain.com'); // cookie stored for a year
$_COOKIE['uln'] = $lang;
endif;
//if lang=(value) is not empty
if(isset($_GET['lang'])) {
$lang = $_GET['lang'];
setcookie('uln', $lang, time()-1, '/', '.domain.com'); //this unsets the cookie for random language selection
//set the cookie "uln" again with the selected language.
setcookie('uln', $lang, time()+86400*365, '/', '.domain.com'); // cookie stored for a year
$_COOKIE['uln'] = $lang;
}
if(($_COOKIE["uln"]) == "en") {
$matched = strncmp("/en/", $_SERVER['REDIRECT_URL'], 3);
if ($matched !== 0) :
header('Location: /en'.$_SERVER['REQUEST_URI']);
endif;
} elseif(($_COOKIE["uln"]) == "he") {
$matched = strncmp("/en/", $_SERVER['REDIRECT_URL'], 3);
if ($matched === 0) :
header('Location: '.$_SERVER['SERVER_NAME'].'/'.$_SERVER['REQUEST_URI']);
endif;
}
?>