将子域添加到localhost URL

Kev*_*vin 75 url http web

我正在编写一个Web应用程序,根据url前缀的不同,它的行为会有所不同.格式如下:

   https://myprefix.mycompany.com
Run Code Online (Sandbox Code Playgroud)

基于myprefix,Web应用程序的行为有所不同.我的网络应用程序从URL中提取该部分并对其进行操作.

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

   https://localhost:1234
Run Code Online (Sandbox Code Playgroud)

我不会做类似的事情:

   https://myprefix.localhost:1234
Run Code Online (Sandbox Code Playgroud)

测试这种情况的最佳方法是什么?

非常感谢

Mat*_*ude 111

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

127.0.0.1    example.com
127.0.0.1    subdomain.example.com
Run Code Online (Sandbox Code Playgroud)

您的计算机现在将对待它们example.com并且subdomain.example.com属于它自己.如果您在Web浏览器中访问它们,原则上它们的工作方式相同localhost,但您的Web服务器将在其Host标头中看到正确的域.

  • 您将不得不像往常一样只使用URL中的端口,例如,`http://subdomain.example.com:1234/whatever`.端口完全独立于域(域用于标识机器,端口用于标识机器上与哪个程序通信). (5认同)
  • 可以在IP地址后列出域名:`127.0.0.1 example.com sub.example.com sub2.example.com ...` (3认同)
  • 这也适用于Windows。Windows上的主机文件位于:C:\ Windows \ System32 \ drivers \ etc \ hosts。您需要将文件复制到权限较低的其他地方(例如桌面)进行编辑,然后将其粘贴回文件夹(以解决权限问题)。 (2认同)

Vas*_*yov 28

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

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

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

UPD

sub.localhost:port在chrome工作.Firefox会自动添加www.在输入域的开头可能会导致子域测试问题

  • 为了获得更大的灵活性,您还可以使用服务nio.io或xip.io。它们允许将任何IP地址映射到任何子域。因此,例如,您的同事也可以使用相同的URL来访问您的应用程序。例如,如果您工作站的IP地址为172.16.0.42,则可以从您的PC或Intranet中的其他PC使用https://myprefix.myapp.172.16.0.42.nip.io:1234`。 (2认同)

Shi*_*mmy 8

对于 Windows 用户,根据答案和评论,您可以通过驻留在此路径的主机文件将端口添加到 localhost 来实现此目的:

C:\Windows\System32\drivers\etc\hosts
Run Code Online (Sandbox Code Playgroud)

并在其后面追加如下几行:

127.0.0.1    example.com
127.0.0.1    subdomain.example.com
Run Code Online (Sandbox Code Playgroud)


Ric*_*unn 5

适用于 Windows 的单行解决方案

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

"`n127.0.0.1    sub.mydomain.com" | Out-File C:\Windows\System32\drivers\etc\hosts -encoding ASCII -append
Run Code Online (Sandbox Code Playgroud)

分解:

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


小智 5

您应该将.test域用于类似的事情。这就是.test目的。 localhost不应该有任何子域。

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

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

  • 实际上,RFC 标准[由 IANA 引用](https://www.iana.org/domains/reserved) 明确[允许“localhost”的子域](https://www.rfc-editor.org/rfc/rfc6761)。 html#section-6.3): '域“localhost”。**并且任何属于“.localhost”的名称。**都是特殊的...'是否有另一个与此相矛盾的 RFC 标准? (4认同)