【问题标题】:Serving static content under umbraco (via IIS)在 umbraco 下提供静态内容(通过 IIS)
【发布时间】:2012-04-27 17:18:05
【问题描述】:

我在根目录上有一个 Umbraco 站点。它工作正常。

我需要能够从 IIS 提供静态(不是 ASP.NET)内容,例如 /foo。 (/foo 映射到与主应用程序不同的文件夹结构,例如:

www.example.com     -> d:\sites\example.com
www.example.com/foo -> d:\sites\static\foo
www.example.com/bar -> d:\sites\static\bar
  • 我可以设置一个 IIS 应用程序,但随后我继承了父应用程序 web.config,由于这是静态内容,它不需要任何 dll 等(也不应该拥有它们!)

  • 我可以设置一个 IIS 虚拟目录,并在 web.config 中添加各种位以告诉 Umbraco 不要使用该文件夹(umbracoReservedUrls、umbracoReservedPaths)。这行得通,但是它仍然作为主要的 ASP.NET 应用程序运行,我更希望它只是静态的(即不允许 .NET 运行时)

两者都不理想,因为我们可能有其中一些,因此需要编写所有创建脚本。编辑 4 个 web.config 文件(在 Web 集群中)并不理想。

我想要的是:

  • 创建一个指向正确位置的虚拟目录(或应用程序)。告诉 IIS 将其作为静态内容提供。如果我必须将 web.config 放到文件夹 (/foo) 中,告诉它根本不加载任何内容,那很好(然后我可以使用非 .NET 应用程序池)

我搜索的所有内容都带有“不,无法完成”。我错过了什么吗?

[编辑]

澄清一下,我不需要 CDN — 我们有。我只想让 /foo 成为它自己的文件夹,其中包含一堆 html/css/images(例如 /foo/index.html、/foo/images/logo.png),它们由用户提供,但是不是通过 umbraco — 只是通过 IIS。

【问题讨论】:

  • 我们最终在一个单独的域上使用了一个静态站点,并将用户重定向到它。计划是将重定向移动到 HAProxy(在前面),而不是让 umbraco 来做。

标签: iis umbraco virtual-directory


【解决方案1】:

关于问题中的第二个建议,您可以告诉 IIS 禁止脚本访问。

我只是不得不做一些类似的事情作为快速修复需要 SSL 托管几天的工作,所以我做了:

  1. 将代码放在 Umbraco 站点内自己的文件夹中。

  2. 使文件夹成为自己的应用程序:


    (来源:serverintellect.com

  3. (如果我愿意的话,我可以在这里禁用执行权限,从上面屏幕截图中的“仅限脚本”的下拉框中,但我实际上需要执行权限才能进行快速修复。)

  4. 添加了一个最小的 Web.config 来覆盖我不想要的 Umbraco Web.config 的位:

    <configuration>
       <system.web>
          <httpModules>
             <clear/>
          </httpModules>
          <httpHandlers>
             <clear/>
             <add path="*.aspx" verb="*"
               type="System.Web.UI.PageHandlerFactory" validate="true"/>
             <add path="*" verb="GET,HEAD,POST"
               type="System.Web.DefaultHttpHandler" validate="true"/>
             <add path="*" verb="*"
               type="System.Web.HttpMethodNotAllowedHandler" validate="true"/>
          </httpHandlers>
       </system.web>
    </configuration>
    

    (这些处理程序是直接从我笔记本电脑上的C:\​Windows\​Microsoft.NET\​Framework64\​v4.0.30319\​Config\​web.config 复制的)

  5. 没有第五步。

很快——而且非常很脏——但它确实有效;o)

【讨论】:

    【解决方案2】:

    可能有点难看,但你能在你的 umbraco 根文件夹中创建一个符号链接,然后像普通文件夹一样提供它吗? (也许还会在 web.config 中添加 umbracoReservedPaths 设置的路径)

    【讨论】:

    • 谢谢马特 - 不太确定这将如何工作 - 更想向 umbraco 添加一些文件夹,而不是相反。还是我看错了?
    【解决方案3】:

    我从来没有找到一个好的解决方案,所以我们最终只是把它放在一个单独的域上,并使用 UrlRewriting 将用户重定向到另一个服务器。

    不完美,但确实有效。

    【讨论】:

    • hrmmm,我希望我回答自己的问题没有得到分数。如果我这样做了,我会把它们交给马特,即使这不是正确的答案。
    最近更新 更多