如何使用 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?的主要内容,如果未能解决你的问题,请参考以下文章