如何在开发机器上测试子域? abc.localhost
Posted
技术标签:
【中文标题】如何在开发机器上测试子域? abc.localhost【英文标题】:How to test subdomains on a development machine? abc.localhost 【发布时间】:2009-05-16 17:36:43 【问题描述】:我正在尝试开发一个包含多个子域的 asp.net 站点。我是一般网站的新手,尤其是 asp.net。但是,通配符子域似乎是通过 dns 条目和 Web 服务器配置的组合正确设置的——这不会在我的开发机器上发生。因此,我在我的 Windows hosts 文件中手动插入条目:
127.0.0.1 localhost
127.0.0.1 abc.localhost
127.0.0.1 xyz.localhost
但是,当我尝试询问 Request.Url 属性时,看不到子域。例如,如果我在浏览器中点击http://abc.localhost:1660/
,我会从Request.Uri.ToString()
得到http://localhost:1660/
; abc
没了?!
我不知道为什么主机文件会这样工作,但是我可以使用其他方法将子域导入本地 Web 应用程序吗?谢谢大家。
请注意,我只使用内置的 asp.net 开发服务器,而不是完整的 iis 服务器。 (本周末我无法访问完整的 IIS,但我仍然想知道这是否有帮助。)
【问题讨论】:
我认为这可能是使用内置网络服务器的一个因素。我不相信这会发生在一般的 IIS 服务器上。 (如果您运行的是 XP,您确实拥有它;您只需将您的网站设置为虚拟应用程序)。 【参考方案1】:不知道标头,但我使用的一个鲜为人知的技巧是所有 127.* 地址都是 localhost 地址,而不仅仅是 127.0.0.1。您实际上可以运行一台服务器在 127.0.0.1 端口 80 上进行监听,而另一个 Web 服务器实例在 127.0.0.2 端口 80 上进行监听。那么您可以将 127.0.0.1 命名为 localhost,127.0.0.2 可以是 abc.localhost(或 abc.mydomain .com 以便您可以针对本地网络服务器测试真实的实时 URL)等。
【讨论】:
【参考方案2】:我使用的是 Windows 7、IIS 7.5、VS 2008、SQL server 2005
我能够在 localhost 上成功模拟子域购买将以下行放在 etc/hosts 中
127.0.0.2 myapp.localhost.com
并且,在 IIS 中,我设置了一个新网站,并对绑定部分进行了以下修改:
Hostname = myapp.localhost.com
IP address = 127.0.0.2
我还创建了一个新的应用程序池,但这不是必需的。您可能必须更改用于处理请求的身份验证用户。我的默认 IIS 用户有 SQL 连接权限错误。
IIS>Application Pools>>Right Click on your pool>Advanced Settings>Identity = LocalSystem
【讨论】:
【参考方案3】:您可以使用 "Request.Headers["HOST"]" 获取带有完整子域的请求域。这是一个返回当前请求的子域的简单方法。此方法还假设您在域之后有一个“.COM”、“.NET”等,就像真正的 web 一样。因此,您需要更改 HOSTS 文件以包含“localhost.com”、“abc.localhost.com”等。
public string subdomain()
string host = Request.Headers["HOST"];
if (!string.IsNullOrEmpty(host))
var parts = host.Split('.');
if (parts.Length > 2)
return parts[0];
return string.Empty;
我正在搜索这件事,而这篇文章实际上帮助我解决了这个问题: https://web.archive.org/web/20090813174916/http://blogs.securancy.com/post/ASPNET-MVC-Subdomain-Routing.aspx
【讨论】:
以上是关于如何在开发机器上测试子域? abc.localhost的主要内容,如果未能解决你的问题,请参考以下文章
将 LEMP Wordpress 站点手动迁移到子域以进行测试/开发
如何在 IISExpress 上使用带有 localhost 的子域?