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

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

我该怎么做?谢谢!

有帮助吗?

解决方案

这需要多个步骤。

首先,您必须了解用户如何配置其域以获得您网站的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的自定义类,它也考虑了域。

其他提示

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

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

我怀疑你能否与所有网络主机建立这样的集成,所以唯一完整的解决方案是自己托管用户的网站(我不了解你的更广泛的情况,以确定是否是一个合理的解决方案)。

注意:在您自己的网络服务器上设置别名(也就是网址重写)是行不通的,除非您自己托管他们的网站,因为显然从用户域获取的人不会首先到达您的服务器。 / p>

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

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

请记住,只将默认网站映射到您自己的友好名称。如果将其置于混杂模式(映射到“*”),结果将无法预测。

设置主机头映射

Sites 节点下选择默认网站。在右上角的 Actions 窗格中,单击 Bindings ... 以打开 Site Bindings 对话框。将有一个绑定列表,可能包含一个名为http * 80的条目。选择此项并单击编辑... 按钮。将主机名设置为您自己的友好名称。

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

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

看起来像别名:)

当然,既然你是基于asp.net/windows,我认为你必须深入挖掘IIS以自动化这类东西。如果您使用的是apache,它将向httpd.conf中添加3条简单的行。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top