从url获取子域名?

时间:2012-10-21 11:41:36

标签: php

我需要从网址获取一些价值。
就像网址是http://www.random.mysite.com/

一样

然后我想知道random

但是如果它在网址的前面使用wwwhttp://https://,这应该会有用。

那怎么办呢?

我试过这个: array_shift(explode(".",$_SERVER['HTTP_HOST']));

如果网址为http://random.mysite.com/,则会有效,但如果我将www放在前面,那么我会返回www吗?

有什么想法吗?

5 个答案:

答案 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://与该主机名之间的所有内容都是您的子域名。