条件主机文件

条件主机文件

我正在本地开展一个项目,并希望一些对域名的请求能够解析,localhost而其他请求则只转到它们通常会去的地方。

我想在我的 hosts 文件中执行以下操作:

86.75.3.09 www.example.com/dir/*
127.0.0.1 www.example.com

据我所知,这在 上是不可能的/etc/hosts,但我可能是错的。不过,我愿意听取建议。我正在使用 Apache,并尝试使用代理将/dir/*请求发送到真实的IP 地址为www.example.com,但他们无法解析我来自哪里——我需要它看起来像是我www.example.com直接访问www.example.com

即,这不能实现我在网站配置中想要的效果:

ProxyPass /dir/ https://86.75.3.09/dir/

因为这样国外网站就会认为我从那里访问86.75.3.09,但实际上不是example.com

答案1

据我所知,/etc/hosts 无法做到这一点,但我可能是错的

你理解得对。

DNS(/etc/hosts 是 DNS 解析器的一部分)解析主机。
它不对 URL 执行任何操作。

In86.75.3.09 www.example.com/dir/*不是计算机/主机的名称,因此它应该抛出错误或忽略该行。

这是正常的 DNS 操作,这就是它的工作原理。

令人困惑的是,HTTP 是一个奇怪的协议。HTTP 协议确实会查看服务器名称和目录。主机将使用 DNS 来解析 IP,然后发送包含 URL 的数据报。这就是为什么当您使用代理(或甚至在单个 IP 上使用多个网站域)时,您可以为不同的目录设置不同的规则。

但正如之前所写,HTTP 在这里是个奇怪的家伙。首先它需要通过 DNS 解析 IP。


我考虑过把这个作为评论发布,因为除了让你了解哪里出了问题之外,它并不能真正帮助你解决问题。遗憾的是,评论不允许太多格式。 :(

答案2

我已经解决了类似的问题,为测试项目目录设置了三级域名local.example.com,并在 Apache 上使用 mod_rewrite 和 .htaccess 规则。hosts 文件是: www.example.com 93.184.216.34 local.example.com 127.0.0.1

相应 Apache 虚拟服务器上的 .htaccess 文件是 RewriteEngine on RewriteCond %{HTTP_HOST} ^local.example.com RewriteRule ^(.*)$ /testdir/$1 [L,NC,QSA]

相关内容