1

如何在 IIS 7 中托管多个网站并为所有网站使用相同的 MVC 应用程序,以便每个网站:

  1. 拥有自己的根目录,因此用户可以上传自己的文件(html、css、javascript)而无需查看其他网站的内容

  2. 使用相同的 MVC 应用程序 - 因此对应用程序的更新会影响所有站点

  3. 用户不能以任何方式影响 MVC 应用程序(最好对他们隐藏)

谢谢!

4

2 回答 2

1
  1. 创建一个部署 MVC 文件的目录,名为“AppFoo”。请注意,配置文件web.config将在所有站点之间共享,您必须在按需运行时通过查看HostHTTP 标头或其他绑定信息来加载每个站点的配置。
  2. 在 IIS 中创建每个网站并让它使用您创建的应用程序目录。理想情况下,每个网站都在自己的应用程序池下运行,并拥有自己的用户帐户,所有用户帐户都可以访问 AppFoo 目录。
  3. 在某处创建一个新目录,例如C:\Inetpub\sites\命名为WebsiteAWebsiteB等。每个文件夹重新设置 NTFS 权限 ACL,只允许每个网站的应用程序池用户访问。在这些文件夹中创建名为“Content”、“Views”和“Logs”的文件夹
  4. 为 IIS 中的每个网站(我假设您使用的是 root)设置一个名为“Content”和“Views”的虚拟目录(我假设您已经设置了 MVC 应用程序),将它们映射到您在步骤 3 中创建的文件夹。
  5. 对于每个网站,转到日志记录页面并将日志路径设置为Logs您在步骤 3 中为该网站创建的目录。

请注意,此计划基于 MVC 在其 VirtualPathProvider 中评估 IIS 虚拟目录的假设。如果没有,那么您将不得不滚动您自己的 VirtualPathProvider 以再次以每个主机名为基础加载每个网站的内容。

于 2013-04-11T02:32:25.510 回答
0

如果您正在运行一个代码库,则设置一个使用域路由或全局过滤器来捕获域的站点,将其保存并将其用作文件夹的键等...

public class DomainFilterAttribute : ActionFilterAttribute
{
    private SiteDomainRepository _siteDomainRepository = new SiteDomainRepository();

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var viewBag = filterContext.Controller.ViewBag;
        var host = HttpContext.Current.Request.IsLocal ? "www.testdomain.com" : HttpContext.Current.Request.Url.Host;
        var domain = hostSplit[1];

        var siteDomain = _siteDomainRepository.GetByRowKey(domain);

        viewBag.DomainName = host.ToLower();
        viewBag.Domain = siteDomain.RowKey;
        viewBag.Class = siteDomain.Key;
        viewBag.TrackingCode = siteDomain.TrackingCode;
    }
}
于 2013-04-11T04:00:09.043 回答