将子域检索为get变量

时间:2010-07-12 11:55:16

标签: php .htaccess url-rewriting subdomain

大家好我正在设置mywebapplication为用户提供独特的网址,例如uniquename.mysite.com,anotheuniqname.mysite.com等。

我希望能够在php脚本中抓取url的子域部分。如果我可以将它作为GET变量得到它会很好 - 我认为它可以用htaccess完成。有什么想法吗?

7 个答案:

答案 0 :(得分:3)

$subdomain = substr($_SERVER['HTTP_HOST'], 0, strpos($_SERVER['HTTP_HOST'], '.'));

确保有一个有效的子域:

$urlExplode = explode('.', $_SERVER['HTTP_HOST']);

if (count($urlExplode) > 2 && $urlExplode[0] !== 'www') {

    $subdomain = $urlExplode[0];

}
else {
    // treat as www.mysite.com or mysite.com
}

答案 1 :(得分:2)

我会尝试这个(在PHP代码的开头):

$_GET['subdomain'] = substr($_SERVER['SERVER_NAME'], 0, strrpos($_SERVER['SERVER_NAME'], '.'));

说明:strrpos找到“。”的最后一次出现。在访问的域中,substr然后将字符串返回到此位置。我将返回值分配给$_GET var,因此您可以像使用普通的URL参数一样使用它。

答案 2 :(得分:2)

将它放在你的bootstrap文件中:

$tmp = explode(".", $_SERVER["HTTP_HOST"], 2);
$_GET["subdomain"] = $tmp[0];

答案 3 :(得分:1)

阿里 - 你不是指一个$_SERVER变量,因为$_GET与查询字符串有关吗?

如果是这样,那么你可以尝试:

$_SERVER['HTTP_HOST'] 

吉姆

[edit] - 请参阅http://roshanbh.com.np/2008/05/useful-server-variables-php.html了解可能有用的一些示例

答案 4 :(得分:0)

如果您真的想在mod_rewrite文件中使用.htaccess,可以执行以下操作(假设您的脚本在此示例中为index.php):

RewriteEngine On

# Prevent people from going to to index.php directly and spoofing the
# subdomain value, since this may not be a desirable action
RewriteCond %{THE_REQUEST} ^[A-Z]+\sindex\.php.*(\?|&)subdomain=
RewriteRule ^.*$ http://%{HTTP_HOST}/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTP_HOST}        !^www
RewriteCond %{HTTP_HOST}         ^([^\.]+)\.([^\.]+)\.([^\.]+)$
RewriteRule ^.*$ index.php?subdomain=%1

答案 5 :(得分:0)

你想要的东西是:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^[a-z0-9-]+\.yoursite\.com$
RewriteRule !^index\.php$ index.php [L]

然后您可以使用

获取子域名
<?php

preg_match('/^http:\/\/([a-z0-9-]+)\.yoursite.com$', $_SERVER['HTTP_HOST'], $matches);

$_GET['username'] = $matches[1];

?>

答案 6 :(得分:0)

这个小功能只会让您的“www.website.com”或您的情况为“subdomain.website.com”,然后将其拆分为3个( 0=>"www", 1=>"website", 2=>"com" ),然后返回值{{1 },这是“1”或您的子域名。

www

Exaple:如果您的网站是“function isSubdomain() { $host = $_SERVER['HTTP_HOST']; $host = explode('.',$host); $host = (is_array($host)?$host[0]:$host); return $host; } ”,您将收到“admin.website.com”。