以下是我在本地开发机器上配置的虚拟主机:
#
<VirtualHost *:80>
ServerName mytestsite
ServerAlias x.mytestsite
ServerAlias y.mytestsite
DocumentRoot "c:/wamp64/www/mytestsite"
<Directory "c:/wamp64/www/mytestsite/">
Options +Indexes +Includes +FollowSymLinks +MultiViews
AllowOverride All
Require local
</Directory>
</VirtualHost>
在浏览器中输入
mytestsite
或x.mytestsite
或y.mytestsite
- 后,它会在 Google 搜索中打开。有什么方法可以让上述名称指向虚拟主机站点吗?在浏览器中,当我输入
mytestsite/
时,它会连接到我的本地站点。但是,当我输入x.mytestsite/
或y.mytestsite/
时 - 它会说找不到网页。使其他 2 个子域正常工作的正确方法是什么?作为一种试验方法,我修改了计算机上的 hosts 文件,并添加了以下几行,如下所示;现在所有 3 个(
mytestsite/
、x.mytestsite/
、y.mytestsite/
)都可以正常工作。但是,修改计算机上的 hosts 文件是否正确,以使子域名正常工作?
127.0.0.1 mytestsite
127.0.0.1 x.mytestsite
127.0.0.1 y.mytestsite
答案1
您所描述的问题不是 Apache 的问题,而是域解析的问题(虽然我以前没有在 Apache 上看到过 2 条服务器别名行 - 别名通常位于 1 行,以空格分隔。这可能是有效的语法,或者可能只是恢复为默认值)
解决此问题的正确方法是将子域添加到 DNS 服务器区域记录。
如果您只打算使用本地机器访问这些地址,将其放在 hosts 文件中就足够了 - 但这只适用于已编辑 hists 条目的机器。
答案2
顾名思义,主办方文件仅用于主机名。它不支持通配符条目或类似内容。语法为:
IP_address canonical_hostname [aliases...]
同一 IP 地址的多个条目也有效。
如果需要example.com
,a.example.com
和b.example.com
,则需要将所有三个主机名明确添加到主办方文件。所以,是的,你的方法是正确的。
如果您想要更好的人体工程学,请考虑使用支持通配符的 DNS 服务器/转发器。域名系统就是这样一个项目。也许systemd-已解决也可以做到,但我不太熟悉。