我正在开发一个网站,它将使用任何给定的子域名部分(即主机名前面的部分,以及可选的 TLD 部分)。我认为在生产中,这将是一项简单的任务 - 确保二级域名部分的 DNS 指向 IP,设置 Apache2 虚拟主机以侦听该(或任何)IP 端口 80,然后仅使用 PHP 根据“主机”请求标头做出决策。
但是,由于我使用工作站进行开发,因此当前站点是 localhost,因此我首先修补了 /etc/hosts 以包含:
127.0.0.1 mydomain
我只使用了一个名称部分(可以说是自定义 TLD),以免干扰 Internet 域名。然后我为 Apache 2.2 设置了一个 VirtualHost 指令,如下所示:
<VirtualHost *:80>
ServerName mydomain
但现在我可以看到 fe example.mydomain 不指向 localhost,这意味着 /etc/hosts 添加对“something.mydomain”无效。看来规则是逐字执行的,而且我已经检查过不允许使用 *.mydomain 等通配符。
有解决办法吗?
答案1
如果你使用的是 Linux(我假设你是,因为你提到了 /etc/hosts),你可以尝试域名系统为此。我有时会使用它进行快速测试和本地 DNS 覆盖。
所需步骤:
- 安装域名系统
配置您的站点以使用 dnsmasq 进行 DNS 解析。
编辑
/etc/resolv.conf
并放入:nameserver 127.0.0.1
这样做的副作用是本地 DNS 缓存,这通常是另一个优点(但请注意这一点)。
调整域名系统配置。
编辑
/etc/dnsmasq.conf
:address=/example.com/127.0.0.1
您需要将根域名放在这里,它应该将所有子域名解析为本地主机这边走。
重新开始域名系统
使用
host example.com
和进行验证host subdomain.example.com
。两者都应指向本地主机。