嗨,大家好我设立mywebapplication给唯一网址,供用户如uniquename.mysite.com,anotheuniqname.mysite.com等检索子域作为获得可变
我希望能够在一个PHP脚本抓住网址的子域部分。如果我可以将它作为一个GET变量会很好 - 我认为可以用htaccess来完成。有任何想法吗?
嗨,大家好我设立mywebapplication给唯一网址,供用户如uniquename.mysite.com,anotheuniqname.mysite.com等检索子域作为获得可变
我希望能够在一个PHP脚本抓住网址的子域部分。如果我可以将它作为一个GET变量会很好 - 我认为可以用htaccess来完成。有任何想法吗?
阿里 - 你不是指$_SERVER
变量,因为$_GET
会和查询字符串有关吗?
如果是这样,那么你可以尝试:
$_SERVER['HTTP_HOST']
吉姆
[编辑] - 看到http://roshanbh.com.np/2008/05/useful-server-variables-php.html几个例子,可以帮助
我想尝试这个(之初您的PHP代码):
$_GET['subdomain'] = substr($_SERVER['SERVER_NAME'], 0, strrpos($_SERVER['SERVER_NAME'], '.'));
说明:strrpos
找到最后一个oc ''的保证。在访问的域中,substr
然后将字符串返回到此位置。我将返回值分配给$_GET
var,因此您可以像使用普通的URL参数那样使用它。
对于示例子域:'foo.some-domain.com',您在上面提供的代码将返回'foo.some-domain'。我认为你期待'富'。 – 2011-07-03 11:21:02
当只使用顶级域名(即 - 'some-domain.com')时,此方法不太可靠。使用示例域上面的代码:'some-domain.com',会导致'某个域'。 您可以合并以下两行来评估子域是否存在: $ subdomain =''; ($ _SERVER ['SERVER_NAME'],'。')> 1){sub_main = substr($ _ SERVER ['SERVER_NAME'],0,strpos($ _ SERVER ['SERVER_NAME'],“) 。“)); }' – 2011-07-03 11:22:08
$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
}
在引导文件将这个:
$tmp = explode(".", $_SERVER["HTTP_HOST"], 2);
$_GET["subdomain"] = $tmp[0];
如果你真的想在你的.htaccess
文件中使用mod_rewrite
,你可以做这样的事情(假设你的脚本在本例中为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
如果你在'httpd.conf'文件中有这个文件,而不是.htaccess文件,那么我不明白为什么PHP会更有效率。由于PHP被解释,并且大多数web服务器都被编译,我认为'mod_rewrite'会更有效率。 – icktoofay 2010-07-13 07:51:16
我倾向于同意你的看法。假设他要在每个目录的环境下完成它(基于他的措词),并且考虑到他将以任何方式调用PHP脚本,但我不确定是否使用了mod_rewrite的表达式编译和内部在这个阶段被迫做出的重定向将比在脚本中处理变量更快。无论如何,我想这种差异不是很重要。 – 2010-07-13 08:33:04
您的代码包含错误:RewriteCond:无法编译正则表达式'^ [A-Z] + \\ sindex \\。php。*(?|&)subdomain =' – JM4 2011-01-27 18:55:44
你想沿着线的东西:
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];
?>
这个小功能将只是获得获得子域的“www.website.com
”或你的情况“ subdomain.website.com
“,然后将其分成3部分(0=>"www", 1=>"website", 2=>"com")
,然后返回值1
,即”www
“或您的子域名。
function isSubdomain()
{
$host = $_SERVER['HTTP_HOST'];
$host = explode('.',$host);
$host = (is_array($host)?$host[0]:$host);
return $host;
}
的exaple:如果你的网站是 “admin.website.com
”,您将收到 “admin
”。
实际上,我设置了我的Web应用程序,以便在用户设置时从设置的URL中访问。像mysite.wordpress.com一样。 – Ali 2010-07-12 12:02:20
感谢anax - 忘记了4个空格重新编码:) – 2010-07-12 12:29:17