2

我需要从 url 中获取一些价值。
如果 url 是http://www.random.mysite.com/

然后我以某种方式想要得到random.

但是,如果它使用www,http://https://在 url 前面,这也应该有效。

那么如何做到这一点呢?

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

如果 url 是http://random.mysite.com/,它可以工作,但是如果我放在www前面,那么我会被www退回吗?

有任何想法吗?

4

5 回答 5

4

你可以试试

$url = 'http://random.mysite.com/';
$url = parse_url($url,PHP_URL_HOST);
$url = strstr(str_replace("www.","",$url), ".",true);
var_dump($url);
于 2012-10-21T14:16:04.483 回答
3

前面没有 http[s]:// 的 URL 不是 URL。它们是字符串。

$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

试试这个。为什么要三步?明确地说,以便您了解它的作用并在没有 / 和 a 时满足复杂的情况?直接地。顺序也很重要。它可以一次合并,但您需要进行一些测试才能正确执行...

于 2012-10-21T11:59:08.713 回答
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]

此代码的更多变体在这里。这对 SEO 也有一点帮助,通常是很好的做法。

于 2012-10-21T12:06:52.713 回答
2

您可以使用在and firstparse_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];
于 2012-10-21T11:46:04.030 回答
1

除了选择域的第一部分并检查它是否是 www,您还可以从后面开始。域名爆炸后,最后一部分是“com”,之前的部分是“yoursite”。之前的部分是“随机”或“www”。“www”本身就是一个子域,您甚至可以说“www.random”是与“random”不同的子域。

缺点是 TLD 可以是“.com”,但也可以是“.co.uk”,在这种情况下,“yoursite”将被视为子域,而实际上并非如此。

您经常看到的设置,尤其是在可用于多个站点的框架或库中,是允许您指定主主机名 (yoursite.com) 的设置。这样,您可以轻松断定protocol://主机名和该主机名之间的所有内容都是您的子域。

于 2012-10-21T12:05:05.797 回答