我有域名 www.mysite.com。我最终想用它做以下事情:
在网站 www.mysite.com 上,将有一个针对我的网站/产品(我将其称为“软件”)的营销网站和一个注册表单。注册时,客户会指定他们想要使用的子域名,因此假设他们的公司是 XYZ 公司,他们会选择“xyz”子域名。
不知何故,url xyz.mysite.com 能够运行我的软件的代码。
我的软件将检查每个请求的域名,并提取子域值,即“xyz”。它使用它来设置连接字符串,即使用数据库“xyz”,以便客户可以访问他的数据。
基本上就是这样。不过,还有几件事:
我只想拥有 1 份代码副本。所有子域都应有效地将请求“重写”到此代码的中心副本,因为代码在客户端/子域之间是相同的。
理想情况下,尽管这不是必需的,但我希望能够“通配” A 记录(或 CNAME 记录,或其他),这样每当客户端注册时,我就不需要进行任何进一步的 DNS 修改 - 即子域中的每个值都会重写到单个代码文件夹中。当客户端请求登录页面时,我会检查该子域是否已注册,如果没有,则返回 404。
我该如何实现这一点?我需要哪些 DNS 记录、别名或子域的组合?
答案1
您没有提到您打算使用什么 Web 服务器,但从高层次上讲您需要做的是:
- 添加指向您服务器 IP 地址的 *.mysite.com A 记录。这是一种标准记录类型,所有提供商都支持它。(以下是 GoDaddy 的示例https://uk.godaddy.com/help/setting-up-wildcard-dns-3301)
- 确保 Web 服务器中的默认虚拟主机是为您的网站提供服务的虚拟主机。此虚拟主机将捕获任何请求未在其他地方指定的地址的流量。(以下是 Apache 的示例https://httpd.apache.org/docs/2.2/vhosts/examples.html#default)
- 无论你用什么语言编写网站,都要利用从 Web 服务器传递到你的代码的数据,这些数据与 HTTP 请求中使用的地址(主机名)有关。这就是你区分客户端网站的方法。(这是一个 PHP 示例https://stackoverflow.com/questions/5128474/php-server服务器名称-correct-use)