【发布时间】:2013-04-11 02:18:52
【问题描述】:
如何在 IIS 7 中托管多个网站并为所有网站使用相同的 MVC 应用程序,以便每个网站:
拥有自己的根目录,因此用户可以上传自己的文件(html、css、javascript)而无需查看其他网站的内容
使用相同的 MVC 应用程序 - 因此应用程序的更新会影响所有站点
用户不能以任何方式影响 MVC 应用程序(最好对他们隐藏)
谢谢!
【问题讨论】:
标签: asp.net-mvc-4 iis-7.5
如何在 IIS 7 中托管多个网站并为所有网站使用相同的 MVC 应用程序,以便每个网站:
拥有自己的根目录,因此用户可以上传自己的文件(html、css、javascript)而无需查看其他网站的内容
使用相同的 MVC 应用程序 - 因此应用程序的更新会影响所有站点
用户不能以任何方式影响 MVC 应用程序(最好对他们隐藏)
谢谢!
【问题讨论】:
标签: asp.net-mvc-4 iis-7.5
web.config 将在所有站点之间共享,您必须在按需运行时通过查看 Host HTTP 标头或其他绑定信息来加载每个站点的配置。C:\Inetpub\sites\ 下命名为WebsiteA、WebsiteB 等。每个文件夹都重新设置了只允许每个网站的应用程序池用户访问的NTFS 权限ACL。在这些文件夹中创建名为“Content”、“Views”和“Logs”的文件夹Logs 目录。请注意,此计划基于 MVC 在其 VirtualPathProvider 中评估 IIS 虚拟目录的假设。如果没有,那么您将不得不滚动您自己的 VirtualPathProvider 以再次基于每个主机名加载每个网站的内容。
【讨论】:
如果您正在运行一个代码库,则设置一个使用domain routing 或全局过滤器的站点来捕获域、保存它并将其用作文件夹的键等...
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;
}
}
【讨论】: