【问题标题】:Grabbing entry domain for a site获取站点的入口域
【发布时间】:2010-07-26 07:03:54
【问题描述】:

我有多个指向同一个站点的域,其中一些以“.br”结尾(巴西的域,因此是葡萄牙语的域)

我想检测此人来自哪个域(.br 与否)并加载正确的语言...

我可以使用 PHP、JavaScript 或标准 HTML/CSS 等...我是怎么做到的? (用什么?)

【问题讨论】:

    标签: php javascript html css


    【解决方案1】:

    在服务器端,使用HTTP_HOST 变量,它基本上是Host 标头和检查请求发送到的主机的简单方法。

    $_SERVER['HTTP_HOST']
    

    请参阅此question,了解SERVER_NAMEHTTP_HOST 变量之间的良好比较。

    在客户端,使用document.domain。对于这个页面 - https://developer.mozilla.org/en/document.domaindocument.domain 的值为

    "developer.mozilla.org"
    

    【讨论】:

      【解决方案2】:

      $_SERVER['HTTP_REFERER'] 应该得到该信息。但这不是一个确定的防火方式。有些人在他们的浏览器中关闭或欺骗了引荐来源等。这是我知道的唯一方法,除非您可以将获取数据附加到域上的 url 以设置语言等。然后您只需检查该获取数据。

      【讨论】:

        【解决方案3】:

        如果您使用的是 PHP5.3+,则可以使用

        Locale::acceptFromHttp — 尝试根据 HTTP“Accept-Language”标头找出最佳可用语言环境

        如果没有,您仍然可以自己从 Accept-Language 标头中确定。使用 Accept Header 应该比使用 TLD 更可靠,特别是如果您还需要使用任何 other intl extensions

        【讨论】:

        • 请记住 intl 是 PEAR extension 并且必须单独安装。它没有内置在 PHP 中。 Accept-Language 是确定用户语言的最佳方式,无论您是从扩展程序中获取它还是自己阅读 $_SERVER 中的标题
        • @Charles intl 是 PHP5.3 的原生扩展,不再需要单独安装。
        • 我这里的 5.3 的分布似乎不是这样。我不确定这是否是因为我使用的包没有用它编译,或者我是否缺少底层 ICU 库。
        • 看起来构建发行版的人使用“--enable-intl=shared”这样做并单独打包。烦人,我希望他们不理会默认的编译选项。如果他们不断改变规则,我应该如何获得一致的环境?啊!因此,我坚持我原来的声明,修改后:intl 可能不可用,如果你的包维护者使用构建选项,但总是有 PECL。
        猜你喜欢
        • 1970-01-01
        • 2011-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多