如何使用 PHP 检查页面 url 中是不是包含 www?

Posted

技术标签:

【中文标题】如何使用 PHP 检查页面 url 中是不是包含 www?【英文标题】:How to check if page url has www in it or not with PHP?如何使用 PHP 检查页面 url 中是否包含 www? 【发布时间】:2012-10-31 11:12:51 【问题描述】:

php中,如何检查当前页面的url中是否有www?

例如,如果用户在 http://www.example.com/something 上,我如何才能发现 URL 中有 www,而在 http://example.com/something 上,网址中没有 www?

【问题讨论】:

请记住,如果您使用以下任何方法,请在执行任何操作之前检查以确保 $_SERVER['HTTP_HOST'] 存在。 if (isset($_SERVER['HTTP_HOST'])) 并非每个托管环境都会填充该变量。我遇到过一些没有的。最好同时使用 HTTP_HOST 和 SERVER_NAME 以确保您可以获得要检查的域。 @cryptic SERVER_NAME 是否始终存在? ***.com/questions/2297403/http-host-vs-server-name 会在这两个方面提供一些很好的信息。如果 SERVER_NAME 未在 Apache 上设置,则会在 IP 上进行反向查找。如果您的域有一个专用 IP,它应该解析为正确的域,但如果它是一个共享 IP,您将面临返回的域是不同域的风险。 【参考方案1】:
array_shift(explode(".",$_SERVER['HTTP_HOST']));

应该可以,然后检查数组中是否存在 www。如果您只是想删除或强制使用 www,那么 .htaccess 规则在这项工作上远远优于 PHP。

【讨论】:

HTTP_HOST 是否包含 www 部分?我以为它只包括域.. 不过我可能错了 子域被认为是主机的一部分,所以是的,它应该包含 www【参考方案2】:

你已经知道网址了吗?然后拿这个:

<?php
$parsed = parse_url("http://www.example.com/something");
$hasWww = strpos($parsed['host'], "www.") === 0;
var_dump($hasWww);

否则,采取

 strpos($_SERVER['HTTP_HOST'], "www.") === 0

【讨论】:

【参考方案3】:

From the manual

$_SERVER['HTTP_HOST']

Host 的内容:当前请求的标头,如果有 一个。

$_SERVER['SERVER_NAME']

当前脚本所在的服务器主机名 执行。如果脚本在虚拟主机上运行,​​这将是 为该虚拟主机定义的值。

【讨论】:

【参考方案4】:

你可以做一个preg_match 这将是:

if(preg_match('/www/', $_SERVER['HTTP_HOST']))

  echo 'you got www in your adress';

else

  echo 'you don not have www';

您甚至可以使用 .htaccess 来执行此操作,具体取决于您正在构建的内容,上述选项可以很好地进行简单检测。

如果您选择 Ferdia 提供的选项,请按以下方式进行检查:

$domain = array_shift(explode(".",$_SERVER['HTTP_HOST']));
if(in_array('www', $domain))

    echo 'JUP!';

【讨论】:

您的正则表达式错误,如果他在 URL 字符串末尾的某处有 www 怎么办。检查这个:rubular.com/r/IEzoGnqEm1 他的问题是“网址中的 www”并没有提到它应该在一开始。但是,如果您只想在开头匹配 www,则正则表达式将是:/^www/【参考方案5】:

您可以使用$_SERVER['HTTP_HOST'] 获取您的域名。现在,如果您的网站不使用子域,这很容易。只需使用这样的东西:

$url1 = "www.domain.com";
$params = explode('.', $url1);

if(sizeof($params === 3) AND $params[0] == 'www') 
    // www exists   

请注意,如果您的 params 数组有 2 个项目,则域看起来像这样 domain.com 并且显然没有 www。您甚至可以检查$params 数组的大小,并根据其大小决定是否存在www

现在,如果您的网站使用子域,那么它会变得更加复杂。您可能会遇到以下情况:

$url1 = "www.domain.com";
$url2 = "www.sub.domain.com";
$url3 = "domain.com";
$url4 = "sub.domain.com";

然后您将再次分解每个 url,并比较大小并检查第一项是否为“www”。 但请注意,您的子域可以命名为www,其中www 将是子域:D 然后它看起来像这样:www.domain.com,再一次,www 是子域 :) 这太疯狂了,我几乎对这个发疯了 :)

无论如何,当站点不使用子域时检查www,这很容易。 但是要检查 url 是否有 www 并且您的网站正在使用子域,这可能很困难。 处理该问题的最简单解决方案是禁用 www 子域,如果可以的话。

如果您需要更多帮助而本文无法回答您的问题,请随时提出。 我有类似的情况,用户可以创建自己的子域帐户,例如www.user.domain.com,我必须做同样的事情。

希望这会有所帮助!

【讨论】:

【参考方案6】:

有很多方法可以检查 www 是否包含。

其中一种方法是:

if(strpos($_SERVER['HTTP_HOST'], `www`) !== false) 
    echo "WWW found";
 else 
    echo "WWW not found";

【讨论】:

以上是关于如何使用 PHP 检查页面 url 中是不是包含 www?的主要内容,如果未能解决你的问题,请参考以下文章

检查当前 URL 是不是包含哈希 [重复]

如何检查 URL 是不是包含某些单词?

jquery检查页面URL是不是包含特定路径

检查字符串是不是只包含 PHP 中的 URL

PHP检查字符串是不是包含不带http://的url

如果 URL 已存在于数据库中,如何使用 PHP 检查?