大家好我正在设置mywebapplication为用户提供独特的网址,例如uniquename.mysite.com,anotheuniqname.mysite.com等。
我希望能够在php脚本中抓取url的子域部分。如果我可以将它作为GET变量得到它会很好 - 我认为它可以用htaccess完成。有什么想法吗?
答案 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
”。