将子域添加到localhost URL


97

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

   https://myprefix.mycompany.com

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

但是,在本地测试时,我使用本地主机地址:

   https://localhost:1234

我不会做类似的事情:

   https://myprefix.localhost:1234

对我来说,测试这种情况的最佳方法是什么?

非常感谢


Answers:


139

不幸的是,由于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中指定端口号。指定端口的最佳方法是什么?
凯文

7
您将只需要照常使用URL中的端口,例如http://subdomain.example.com:1234/whatever。端口与域完全分开(域用于标识机器,端口用于标识机器上要与之通信的程序)。
Matt Patenaude 2013年

另外,如果您可以以root用户身份运行软件(以进行测试),则可以仅使用默认端口80,因此无需指定端口。
Matt Patenaude 2013年

4
可以在IP地址后列出域名: 127.0.0.1 example.com sub.example.com sub2.example.com...
自动机,2015年

5
这也适用于Windows。Windows上的主机文件位于:C:\Windows\System32\drivers\etc\hosts。您需要将文件复制到权限较低的其他地方(例如桌面)进行编辑,然后将其粘贴回文件夹(以解决权限问题)。
Lindsay-Needs-Sleep

33

我不确定Windows的行为是否相同。我正在研究Linux Mint。

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

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

UPD

sub.localhost:port适用于Chrome。Firefox自动添加www。在输入域的开头可能会导致子域测试出现问题


我可以确认这也适用于Windows。Internet Explorer,Edge,Firefox和Chrome浏览器可以完美运行!
何塞A

我使用的是Firefox和chrome笔尖,这使我节省了很多时间,谢谢!
ZekeMidas,

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

5

对于Windows用户,基于答案和注释,您可以通过以下路径来实现此目的:通过位于以下路径的hosts文件将端口添加到localhost :

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

并在其后附加以下行:

127.0.0.1    example.com
127.0.0.1    subdomain.example.com

1

Windows一线解决方案

管理员身份打开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-追加到文件末尾(重要!)

1

您应该将.test域用于诸如此类的事情。那.test是为了什么。 localhost不应该有任何子域。

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

没有SOA记录,它就不能是具有子记录的区域顶点,因此不允许子域或委派。即使是最近的名为“让localhost成为localhost”的RFC草案也与此一致。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.