如何将任何 *.mydomain 变体指向 localhost(用于开发)?

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 之类的通配符。

有解决方案吗?

Kar*_*zak 5

如果您使用的是 Linux(我假设您是,因为您提到了 /etc/hosts),您可以为此尝试dnsmasq。我有时使用它进行快速测试和本地 DNS 覆盖。

所需步骤:

  1. 安装dnsmasq
  2. 将您的站点配置为使用 dnsmasq 进行 DNS 解析。

    编辑/etc/resolv.conf并放置:

    nameserver 127.0.0.1
    
    Run Code Online (Sandbox Code Playgroud)

    这样做的副作用是本地 DNS 缓存,这通常是另一个优点(尽管要注意这一点)。

  3. 修改dnsmasq配置。

    编辑/etc/dnsmasq.conf

    address=/example.com/127.0.0.1
    
    Run Code Online (Sandbox Code Playgroud)

    您需要将根域放在这里,它应该以这种方式将所有子域解析为localhost

  4. 重启dnsmasq

  5. host example.com和验证host subdomain.example.com。两者都应该指向localhost