区域子域

时间:2016-08-24 06:03:24

标签: php mysql .htaccess subdomain

我想制作当前site.com的某些区域子域名,例如city1.site.comcity2.site.com,但我不想将所有文件从原始域复制到子域。
是否可以在子域city1.site.com上显示与site.com相同的信息,但只需设置一个变量,例如$city = 123?通过city1.site.com上的此变量,我可以显示该城市的更具体的联系人和产品。

我是子域新手所以请帮忙,我的网站是PHP& MySQL的。谢谢!

3 个答案:

答案 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'; }