将子域添加到 localhost URL

Posted

技术标签:

【中文标题】将子域添加到 localhost URL【英文标题】:Add subdomain to localhost URL 【发布时间】:2013-10-01 17:33:48 【问题描述】:

我正在编写一个 Web 应用程序,该应用程序的行为取决于 url 前缀。格式类似于:

   https://myprefix.mycompany.com

Web 应用程序的行为会根据 myprefix 有所不同。我的网络应用程序从 URL 中提取该部分并采取行动。

但是,当我在本地进行测试时,我使用的是 localhost 地址:

   https://localhost:1234

我不能这样做:

   https://myprefix.localhost:1234

对我来说测试这个场景的最佳方法是什么?

非常感谢

【问题讨论】:

这里是这个问题的解决方案***.com/a/29629675/2950006 【参考方案1】:

很遗憾,因为localhost 不是一个正确的域,所以您不能像这样向它添加子域。但是,您可以欺骗您的计算机,使其认为它拥有一个特定的域并以这种方式进行测试。例如,如果您有一个基于 UNIX 的操作系统,打开(以 root 身份)文件/etc/hosts 并添加一行(或多行)如下:

127.0.0.1    example.com
127.0.0.1    subdomain.example.com

您的计算机现在会将example.comsubdomain.example.com 视为属于它自己。如果您在 Web 浏览器中访问,它们的工作原理与 localhost 相同,但您的 Web 服务器会在其 Host 标头中看到正确的域。

【讨论】:

非常感谢您的回答。这正是我想要的。但是,我的 Web 应用程序运行在一个端口上,比如 1234。我四处搜索,人们说无法在 /etc/hosts 中指定端口号。指定端口的最佳方式是什么? 您将不得不像往常一样使用 URL 中的端口,例如 http://subdomain.example.com:1234/whatever。端口与域完全分离(域用于标识机器,端口用于标识与机器上的哪个程序进行通信)。 另外,如果您可以以 root 身份运行您的软件(用于测试),您可以使用默认端口 80,因此您不必指定一个。 可以只列出ip地址后面的域名:127.0.0.1 example.com sub.example.com sub2.example.com... 这也适用于 Windows。 Windows 上的主机文件位于:C:\Windows\System32\drivers\etc\hosts。您需要将文件复制到具有较低权限的其他位置(例如您的桌面),对其进行编辑,然后将其粘贴回文件夹中(以解决权限问题)。【参考方案2】:

我不确定 Windows 上的相同行为。我正在研究 linux mint。

您可以使用lvh.me:port 作为本地域。您可以想象您的项目部署在此域的localhost:port 上。

您必须使用sub.lvh.me:port 而不是sub.localhost:port

更新

sub.localhost:port 适用于 Chrome。

注意:Firefox 会自动添加 www。在输入域的开头,这可能会导致子域测试出现问题

【讨论】:

我可以确认这也适用于 Windows。 Internet Explorer、Edge、Firefox 和 Chrome 浏览器完美运行! 我使用的是 firefox 和 chrome tip,谢谢! 为了获得更大的灵活性,您还可以使用服务 nio.io 或 xip.io。它们允许将任何 IP 地址映射到任何子域。所以例如您的同事也可以使用相同的 URL 访问您的应用程序。例如。如果您的工作站的 IP 地址是 172.16.0.42,您可以在您的 PC 或您的 Intranet 中的其他 PC 上使用 https://myprefix.myapp.172.16.0.42.nip.io:1234【参考方案3】:

对于 Windows 用户,根据 this 的回答和 this 的评论,您可以通过位于此路径的 hosts 文件将端口添加到 localhost 来实现:

C:\Windows\System32\drivers\etc\hosts

并在其上附加如下行:

127.0.0.1    example.com
127.0.0.1    subdomain.example.com

【讨论】:

【参考方案4】:

您应该使用.test 域来处理类似的事情。这就是.test 的用途。 localhost 不应该有任何子域。

这样做违反了批准的 RFC 标准。 localhost 具有 A 记录,在 IPv6 环境中具有 AAAA 记录。禁止所有其他 DNS 记录类型,包括 SOA。

没有 SOA 记录,它不能是具有子记录的区域顶点,因此不允许子域或委托。甚至最近的 RFC 草案题为 Let localhost be localhost 也与此一致。

【讨论】:

【参考方案5】:

Windows 的单线解决方案

Administrator 身份打开 PowerShell 并运行以下命令,将 sub.mydomain.com 替换为您想要的任何内容。

"`n127.0.0.1    sub.mydomain.com" | Out-File C:\Windows\System32\drivers\etc\hosts -encoding ASCII -append

细分:

`n - 换行 127.0.0.1 - 环回地址 sub.mydomain.com - 域名 | Out-File C:\Windows\System32\drivers\etc\hosts - 将字符串传送到hosts -encoding ASCII - 正确编码 -append - 附加到文件末尾(重要!)

【讨论】:

【参考方案6】:
https://myprefix.mycompany.localhost:1234

这应该可以解决问题。因为localhost 是***域,所以它的行为类似于生产代码中的.com

【讨论】:

这似乎是非标准的,可能缺乏支持:) Windows + NODE-Fetch(v2.6.4) 没有将 subdomain.localhost 映射到 127.0.0.1 - afaik Linux 没有问题。参考:***.com/a/63515360/3114702 我已经尝试过这个并且工作正常(W11 上的 xampp、localhost 和 subdomain.locahost 工作)。【参考方案7】:

来自 Windows 中的 WSL

首先导航到/mnt/c/Windows/System32/drivers/etc(导航原因,你可能会发现更多有趣的文件。不要在这里玩,但看看他们做了什么) 然后执行nano hosts(在最底部添加)
127.0.0.1    random.com
127.0.0.1    auth.random.com

【讨论】:

以上是关于将子域添加到 localhost URL的主要内容,如果未能解决你的问题,请参考以下文章

apache 虚拟主机子域只能由 localhost 访问

如何在我的本地主机上创建子域? [关闭]

markdown 子域转发到Localhost上的Web服务器

将子域添加到 Route 53 并从 Route 53 控制该子域下的所有子域

让 spring boot 路由到您的子域,而不是 localhost

多个 localhost 子域的 setcookie 用法