Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 根据用户语言自动重定向_Php_Redirect - Fatal编程技术网

Php 根据用户语言自动重定向

Php 根据用户语言自动重定向,php,redirect,Php,Redirect,目标 我正试图根据用户的语言实现自动重定向。我有一个完整的工作代码: // List of available localized versions as 'lang code' => 'url' map $sites = array( "da" => "http://www.fredrixdesign.com/", "en" => "http://en.fredrixdesign.com/" ); // Get 2 char lang code $lang

目标

我正试图根据用户的语言实现自动重定向。我有一个完整的工作代码:

// List of available localized versions as 'lang code' => 'url' map
$sites = array(
    "da" => "http://www.fredrixdesign.com/",
    "en" => "http://en.fredrixdesign.com/"
);

// Get 2 char lang code
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);

// Set default language if a `$lang` version of site is not available
if (!in_array($lang, array_keys($sites)))
    $lang = 'en';

// Finally redirect to desired location
header('Location: ' . $sites[$lang]);
?>
这会将用户重定向到丹麦(da)版本,如果用户是丹麦人,则该版本是主/根网站。如果用户是德语、英语、波兰语等,则会将用户重定向到子域
en.fredrixdesign.com
,这是该网站的英文版

但当一个丹麦用户访问我的网站时,问题就出现了。位于my header.php顶部的代码一直在执行,这意味着它一直在创建重定向,最终由于重定向太多而迫使浏览器创建错误。这是有道理的

问题


那么我的问题是,;如何修改上述代码,使其只执行一次重定向?如果它刚刚完成重定向,它将继续执行站点。

您可以设置一个cookie值,告诉您您已经自动将用户重定向到特定语言的站点。如果该cookie存在,请不要再次执行重定向。您还可以考虑用户有cookie禁用的情况。

您可以使用GeoIP + .HTAccess这样做,这很容易实现。


类似的方法可以达到目的(当然有很多很好的解决方案,但对于两种语言来说,做简单的事情并在需要时进行改进并没有坏处):


嗯,我敢打赌,只要你仔细考虑一下,你自己就能找到解决办法。 您只需检查当前域是否符合所需语言。
只要稍微修改一下你的数组

$sites = array(
    "da" => "www.fredrixdesign.com",
    "en" => "en.fredrixdesign.com"
);
然后为重定向添加一个条件

if ($sites[$lang] != $_SERVER['HTTP_HOST']) {
    header('Location: http://' . $sites[$lang] . '/');
    exit;
}

仅此而已

这确实很有意义。我只需要弄清楚,如何创建这样的代码。我以前从未使用过实现cookie值。@FrederickAndersen这实际上没有。如果您从未使用过实现cookie值-您如何知道它是否是一个好的解决方案?您可以在重定向之前检查语言和位置。如果你是丹麦人并且已经在www上了,你什么都不做。ohter语言也是如此。你认为我需要使用某种形式的
$\u会话吗?我认为这与每次测试你是否是丹麦人并且你的url是好的(
$\u SERVER['SERVER\u NAME']
)是一样的。对于会话,您必须首先检查会话是否存在,然后检查变量。因此,如果你只是根据用户语言和他所在的url来做一个重定向或不重定向的函数,我认为你很好。
if ($sites[$lang] != $_SERVER['HTTP_HOST']) {
    header('Location: http://' . $sites[$lang] . '/');
    exit;
}