将子域添加到 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.com
和subdomain.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的主要内容,如果未能解决你的问题,请参考以下文章
markdown 子域转发到Localhost上的Web服务器
将子域添加到 Route 53 并从 Route 53 控制该子域下的所有子域