我想制作当前site.com
的某些区域子域名,例如city1.site.com
和city2.site.com
,但我不想将所有文件从原始域复制到子域。
是否可以在子域city1.site.com
上显示与site.com
相同的信息,但只需设置一个变量,例如$city = 123
?通过city1.site.com
上的此变量,我可以显示该城市的更具体的联系人和产品。
我是子域新手所以请帮忙,我的网站是PHP& MySQL的。谢谢!
答案 0 :(得分:1)
您可以使用php中的$_SERVER
超全局(阅读文档:http://php.net/manual/en/reserved.variables.server.php,尤其是$_SERVER['HTTP_HOST']
)来查找哪个子域是当前的子域(如果有的话)
其余的可能很简单,例如一个switch语句,取决于当前的子域,如
switch($_SERVER['HTTP_HOST']) {
case 'city1.site.com': $abc=1; break;
case 'city2.site.com': $abc=2; break;
default: $abc=0; break;
}
更新:的想法是,对所有子域使用相同的代码(您不希望保留任意数量的副本)并通过代码强制执行不同的行为。也许你甚至可以设置一个“catchall”域名。
因此,如果您将域site.com
设置为服务器的htdocs/site.com
目录,请同时使用相同目录来存放所有其他域。
要为您的网站获得不同的输出,请检查$abc
变量或其他一些var(甚至可能是$_SERVER['HTTP_HOST']
)
if(strpos($_SERVER['HTTP_HOST'],'.site.com') !== FALSE) {
$subdomain = str_replace('.site.com','',$_SERVER['HTTP_HOST']);
}
else {
$subdomain = null;
}
// now 'city1' is in $subdomain
解压缩子域后,可以使用该值运行sql查询等(如果数据库设置正确)。
答案 1 :(得分:1)
如果区域较少,则可以为每个区域手动创建子域,并将域指向与主站点相同的文件夹。然后在脚本中抓取主机并将其与区域匹配,并为变量分配所需的值。
<?php
if($_SERVER['HTTP_HOST'] === 'city1.site.com') {
$city = 123;
} else if($_SERVER['HTTP_HOST'] === 'city2.site.com') {
$city = 223;
}
如果您有许多区域并且想要动态匹配,则可以将任何子域匹配到主站点路径,并且在脚本内部可以使用方法获取子域并在数据库中搜索。例如:
<?php
$subdomain = strstr($_SERVER["HTTP_HOST"], '.', true);
$city = getRegion($subdomain);
if(!$city) {
// throw 404 error
header('HTTP/1.0 404 Not Found');
exit;
}
// getRegion($subdomain) is a method that should search your database to match the subdomain to a region
要将所有子域匹配到路径,您需要在CPanel中使用通配符。请参阅教程:https://www.namecheap.com/support/knowledgebase/article.aspx/9191/29/how-to-create-a-wildcard-subdomain-in-cpanel
答案 2 :(得分:1)
第一步是确保您的DNS记录已准备就绪。如果以下内容尚不存在,请添加以下内容。
编辑 - 如果您使用的是共享主机,则可能无法正常使用结束
将名称部分设置为“*”,然后将值的下一个设置为当前使用的服务器IP地址。一旦这条规则到位,人们就可以访问{anything} .site.com并将所有内容发送到同一台服务器。
此时,我会做类似于Jakumi的回答,但要保持简单
/* Cut up the URL */
$hostDetails = explode('.', $_SERVER['HTTP_HOST']);
/* Get the first part (city) of the URL */
$city = current($hostDetails);
/* Default check */
if($city == 'site') { $city = 'YOUR_DEFAULT'; }