如何在开发机器上测试子域? 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 站点手动迁移到子域以进行测试/开发

共享在 vagrant 机器上创建的域/子域 url?

将 $.getJSON() 与同一子域上的机器一起使用?

如何在 IISExpress 上使用带有 localhost 的子域?

lvh.me:3000 不再解析为 localhost:3000 以测试开发中的子域

我应该如何将开发和/或测试网站与公共和搜索引擎机器人隔离开来?