【问题标题】:PHP subdomain redirect according to language variablePHP子域根据语言变量重定向
【发布时间】:2014-02-24 21:43:59
【问题描述】:

我正在尝试编写一个 php 脚本,该脚本检查语言(由 $language 中的语言函数定义)一个值,如果用户请求任何地址,www.example.com/foo/bar/data.php?=foobar 它将通过 http 刷新或重定向 或标头位置(不优选) 重定向到 subdomain.example。 com/$1($1 与原始请求的地址相同)。

类似这样,但没有标题位置:

<?php if ($language == "en") { header ("Location: http://"$language".example.com/"$1""); } ?>

这不起作用,我在日志“标题已由另一个文件发送”中出现错误,这是我正在运行的另一个脚本,无法更改代码。

所以,我需要一个脚本来读取变量并根据其值将用户重定向到适当的子域。

【问题讨论】:

  • 如果它的标题已经发送...那么确保没有任何输出(例如php的echo)。还要确保?&gt; 标签的末尾没有任何新行。
  • 它已经由另一个脚本文件发送,但如果不能重写那个,它就保持原样。
  • 既然你的标题提到了 .htaccess 为什么不使用 .htaccess 文件来检查用户浏览器的接受语言stackoverflow.com/questions/11612707/… 并相应地进行重定向,或者你正在做一些事情让他们选择其他的语言?

标签: php redirect http-redirect


【解决方案1】:
<?php
    // Language detection code
    // ...

    if ('en' === $language)
    {
        header('Location: http://' . $language . '.example.com' . $_SERVER['REQUEST_URI']);
        exit();
    }

如果您确实无法更改其他文件中的代码,则需要进行 html 重定向。

<?php
    // Language detection code
    // ...

    if ('en' === $language)
    {
        $url = 'http://' . $language . '.example.com' . $_SERVER['REQUEST_URI'];
        echo <<<EOF
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Refresh" content="0; url={$url}" />
    </head>
    <body></body>
</html>
EOF;
        exit();
    }

【讨论】:

  • 您好,感谢您的帮助。所以我对此进行了测试(将其包含在头文件中),它似乎工作,除了刷新部分..它保持在无限循环中。所以我认为它需要一个条件,比如子域与 www 不同。然后忽略重定向,以便停止。
【解决方案2】:

您好,您可以回显包含重定向的javascript 代码。试试这个。

<?php
    if($language === "en"){
        echo "<script type='text/javascript'> document.location = 'http://' . $language . '.example.com/' . $1; </script>";
    }
?>

header('Location: etc...') 相比,此代码对我最有效。

【讨论】:

  • 好主意!这比 http 刷新或标头位置更适用于 mim
猜你喜欢
  • 2021-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多