amn*_*amn 2 virtualhost apache-2.2
我正在开发一个站点,该站点将使用任何给定的 [variation of] 子域名部分(即在主机名和可选的 TLD 部分之前添加前缀的部分)。我想在生产中,这将是一个简单的壮举 - 确保二级域名部分的 DNS 指向一个 IP,设置 Apache2 虚拟主机以侦听该(或任何)IP 端口 80,然后只需使用PHP 根据“主机”请求标头做出决定。
但是,目前该站点是本地主机,因为我正在使用我的工作站开发它,所以首先我修补了 /etc/hosts 以包括:
127.0.0.1 mydomain
Run Code Online (Sandbox Code Playgroud)
我只使用了一个名称部分(可以说是自定义 TLD),以免干扰 Internet 域名。然后我为 Apache 2.2 设置了一个 VirtualHost 指令,例如:
<VirtualHost *:80>
ServerName mydomain
Run Code Online (Sandbox Code Playgroud)
但是现在我可以看到 fe example.mydomain 没有指向 localhost,这意味着 /etc/hosts 添加对“something.mydomain”无效。似乎规则是逐字逐句地采用的,而且我还检查了不允许使用 *.mydomain 之类的通配符。
有解决方案吗?
如果您使用的是 Linux(我假设您是,因为您提到了 /etc/hosts),您可以为此尝试dnsmasq。我有时使用它进行快速测试和本地 DNS 覆盖。
所需步骤:
将您的站点配置为使用 dnsmasq 进行 DNS 解析。
编辑/etc/resolv.conf
并放置:
nameserver 127.0.0.1
Run Code Online (Sandbox Code Playgroud)
这样做的副作用是本地 DNS 缓存,这通常是另一个优点(尽管要注意这一点)。
修改dnsmasq配置。
编辑/etc/dnsmasq.conf
:
address=/example.com/127.0.0.1
Run Code Online (Sandbox Code Playgroud)
您需要将根域放在这里,它应该以这种方式将所有子域解析为localhost。
重启dnsmasq
用host example.com
和验证host subdomain.example.com
。两者都应该指向localhost。