我需要从网址获取一些价值。
就像网址是http://www.random.mysite.com/
然后我想知道random
。
但是如果它在网址的前面使用www
,http://
或https://
,这应该会有用。
那怎么办呢?
我试过这个:
array_shift(explode(".",$_SERVER['HTTP_HOST']));
如果网址为http://random.mysite.com/
,则会有效,但如果我将www
放在前面,那么我会返回www
吗?
有什么想法吗?
答案 0 :(得分:4)
你可以尝试
$url = 'http://random.mysite.com/';
$url = parse_url($url,PHP_URL_HOST);
$url = strstr(str_replace("www.","",$url), ".",true);
var_dump($url);
答案 1 :(得分:3)
前面没有http [s]://的网址不是网址。他们是字符串。
$hostname = preg_replace('~^https?://(www\\.)?~i', null, $url); // shift scheme and www
$hostname = preg_replace('~#.*$~', null, $hostname); // pop target
$hostname = preg_replace('~\\?.*$~', null, $hostname); // pop query string
$hostname = preg_replace('~/.*$~', null, $hostname); // pop uri
// no guarantee it's a valid hostname, there's more checks you can do here
试试这个。为什么要三个步骤?明确一点,这样你就可以理解它的作用,并且当你没有/和一个时,可以满足复杂的情况。直。订单也很重要。它可以合并为一次攻击,但你需要进行一些测试才能做到正确...当你刮掉一些时,那里有很多格式错误的网址。
答案 2 :(得分:2)
您可以先使用parse_url
获取http://
和https://
之后的所有内容。
然后,使用explode
将域拆分为不同的元素。对于可以从www
开始的特殊情况,请检查爆炸数组中第一个项的值。如果第一个是www
,那么第二个必须是子域。
$url = 'http://www.sub.yourwebsite.com';
$parsed = parse_url($url);
$domain = explode('.', $parsed['host']);
$subdomain = '';
if ($domain[0] == 'www')
$subdomain = $domain[1];
else
$subdomain = $domain[0];
答案 3 :(得分:2)
根据您的需要,更清晰的解决方案可能是确保您首先提供一致的URL。要将所有http://yoursite.com重定向到http://www.yoursite.com,请将其放在.htaccess文件中(假设您使用的是apache)在根目录中。
RewriteEngine On
RewriteCond %{HTTP_HOST} ^your-site.com [NC]
RewriteRule ^(.*)$ http://www.your-site.com/$1 [L,R=301]
此代码的更多变体here。这也有助于SEO,并且通常是良好的做法。
答案 4 :(得分:1)
您可以从后面开始,而不是选择域的第一部分并检查它是否为www。爆炸域名后,最后一部分将是'com',之前的部分是'yoursite'。之前的部分是'随机'或'www'。 'www'本身就是一个子域名,你甚至可以说'www.random'是一个与'random'不同的子域名。
缺点是TLD可以是'.com',但它也可以是'.co.uk',在这种情况下'yoursite'将被视为子域,而实际上并非如此。
您经常看到的内容,尤其是可在多个站点中使用的框架或库中,是一个允许您指定主要主机名(yoursite.com)的设置。这样,您可以轻松地确定protocol://
与该主机名之间的所有内容都是您的子域名。