3

我正在开发一个允许人们发布内容的 ASP.NET MVC Web 应用程序,但除了将内容发布到远程服务器之外,我还希望允许人们直接使用他们的域名。例如,用户“Tom”可以让他的域名 TomSite.com 指向http://www.mywebapp.com/user/tom,但子路径也会被映射。例如,TomSite.com/path 将映射到 www.mywebapp.com/user/tom/path,这对 Web 访问者是透明的。访问者永远不会在 TomSite.com 上的任何地方看到“mywebapp.com”。

我认为 Smugmug.com 提供了这样的服务,允许人们使用自己的域名作为照片组合。我想达到同样的结果。

我怎样才能做到这一点?谢谢!

4

4 回答 4

2

这需要多个步骤。

首先,您必须了解您的用户将如何配置他们的域以便为您的站点提供 CNAME 记录。您可以通过多种方式将其归档,其中最好的就是教育。与托管服务提供商建立合作关系需要大量的业务量。

在 IIS 中,这将要求您手动添加每个主机名(但这也可以通过脚本来归档),或者只为您的站点设置一个专用 IP 地址。

还需要将域与帐户相关联。用户必须自己添加它,您可能会在界面中添加一个检查,以确认域指向您的服务器。代码看起来像(记住要包括 System.Net 命名空间)。

if (Dns.GetHostEntry("www.user.example.com").HostName == "www.example.com")
{
    // www.user.example.com is a CNAME for www.example.com
}

在您的 ASP.NET MVC 项目中,您需要为此特定目的实现路由。创建一个继承自 Route 的自定义类,该类也将域考虑在内。

于 2008-09-28T09:18:47.810 回答
1

Smugmug(你提到的那个人)让他们的用户设置一个 CNAME 记录,该记录将为用户的个人照片部分的 url 设置别名。对于大多数用户来说,这可能需要他们联系他们的主机或查找帮助文件才能完成所有设置。

因此,虽然 www.tomsite.com 可以透明地提供托管在 www.mywebapp.com 上的页面,但用户必须付出一些努力。为了使其完全无缝,您需要与用户网络主机进行某种安排(Smugmug 似乎与 GoDaddy 有这样的安排)。

我怀疑您是否能够与那里的所有网络主机设置这种集成,因此唯一完整的解决方案是自己托管用户的网站(我对您的更广泛情况了解不足,无法确定这是否合理解决方案)。

注意:除非您自己托管他们的网站,否则在您自己的 Web 服务器上设置别名(也称为 url 重写)将不起作用,因为显然从您用户的域获取的人不会首先到达您的服务器。

于 2008-09-27T23:14:00.650 回答
1

让每个客户的友好名称指向您的网络服务器的外部 IP 地址。

使用 IIS 将主机标头请求中指定的友好名称解析为您希望传递给该友好名称的逻辑网站。IIS 将愉快地将网站和虚拟文件夹映射到文件系统中的同一文件夹。为每个客户创建一个网站。然后将该网站绑定到客户的友好名称。

请记住仅将默认网站映射到您自己的友好名称。如果你让它处于混杂模式(映射到“*”),结果将是不可预测的。

设置主机头映射

在站点节点下选择默认网站。在右上角的“操作”窗格中,单击“绑定...”以打开“站点绑定”对话框。将会有一个绑定列表,可能包含一个显示 http * 80 的条目。选择它并单击Edit...按钮。将主机名设置为您自己的友好名称。

运行IIS7 管理器并为每个客户站点在站点节点下创建一个网站。在创建每个网站时设置文件路径和主机头绑定。显然,主机头绑定(主机名)应该是该客户的友好名称。

于 2008-09-27T23:19:03.820 回答
0

只需在您的网络服务器设置 tomsite.com 中直接创建一个新记录到您的 mywebapp.com/user/tom/ 路径?

像别名一样看待它:)

当然,由于您是基于 asp.net/windows 的,我认为您必须深入研究 IIS 才能自动执行此类操作。如果您在 apache 上,它将向 httpd.conf 添加 3 行简单的行。

于 2008-09-27T23:10:49.893 回答