区域子域名

Regional subdomains

我想为我当前的 site.com 创建一些区域子域 - 类似于 city1.site.comcity2.site.com,但我不想将所有文件从原始域复制到子域名。
是否可以在子域 city1.site.com 上显示与 site.com 上相同的信息,但只设置一个变量,例如 $city = 123?在 city1.site.com 上使用此变量,我可以显示该城市的更多特定联系人和产品。

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

您可以使用 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 变量或其他一些变量(甚至可能 $_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 使用该值进行查询或类似操作(如果您的数据库设置正确)。

如果您的区域很少,您可以为每个区域手动创建子域,并将域指向与主站点相同的文件夹。然后在您的脚本中获取主机并将其与区域匹配并将所需的值分配给变量。

<?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

第一步是确保您的 DNS 记录已准备就绪。如果以下内容不存在,请为其添加 A 记录。

编辑 - 如果您使用的是共享主机,这可能无法正常工作END

将名称部分设置为“*”,然后将值旁边的值设置为您当前使用的服务器 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'; }