我正在本地开展一个项目,并希望一些对域名的请求能够解析,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]