将子域添加到本地主机 URL

我正在编写一个网络应用程序,它的行为取决于一个 URL 前缀。格式是这样的:

   https://myprefix.mycompany.com

基于 myprefix,web 应用程序的行为会有所不同。我的网络应用程序从 URL 中提取出这一部分,并对其采取行动。

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

   https://localhost:1234

我不能这么做:

   https://myprefix.localhost:1234

测试这个场景的最佳方法是什么?

非常感谢

95164 次浏览

不幸的是,因为 localhost不是一个正确的域,您不能像那样向它添加子域。你的 可以,但是,欺骗您的计算机,以为它拥有一个特定的领域,并测试事情的方式。例如,如果您有一个基于 UNIX 的操作系统,打开(作为 root 用户)文件 /etc/hosts并添加一行(或多行) ,如下所示:

127.0.0.1    example.com
127.0.0.1    subdomain.example.com

您的计算机现在将把 example.comsubdomain.example.com都视为属于它自己。如果你访问你的网页浏览器,他们将工作原则上相同,作为 localhost,但你的网络服务器将看到正确的域在其主机标题。

我不确定在 windows 上是否有同样的行为,我正在开发 linux 薄荷。

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

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

更新

sub.localhost:port在 Chrome 上运行。

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

对于 Windows 用户,基于 这个的答案和每个 这个注释,您可以通过位于此路径的 接待员文件将端口添加到 localhost 来实现这一点:

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

然后在后面添加如下代码行:

127.0.0.1    example.com
127.0.0.1    subdomain.example.com

Windows 的单行解决方案

管理员的形式打开 PowerShell并运行以下命令,将 sub.mydomain.com替换为您想要的任何形式。

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

细目:

  • 新线路
  • 127.0.0.1环回地址
  • 域名
  • 用管道将字符串连接到 hosts
  • -encoding ASCII编码正确
  • 附加到文件 (重要!)的末尾

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

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

没有 SOA 记录,它就不能成为具有子记录的区域顶点,因此不允许子域或代理。甚至最近的 RFC 草案“让 localhost 成为 localhost”也与此相一致。

https://myprefix.mycompany.localhost:1234

因为 localhost是顶级域,所以它在生产代码中的行为类似于 .com

来自 Windows 中的 WSL :

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

找到指向 localhost 的公共通配符 DNS 域名花了我一些时间,所以我把它留在这里以备将来参考。

为我工作的域是 localtest.me。该域及其子域分解为 127.0.0.1::1。 例如:

$ host localtest.me
localtest.me has address 127.0.0.1
localtest.me has IPv6 address ::1
$ host some-sub-domain.localtest.me
some-sub-domain.localtest.me has address 127.0.0.1
some-sub-domain.localtest.me has IPv6 address ::1

这个要点中可以找到指向 localhost 的其他公共通配符 DNS 域的维护列表。