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