gpt4 book ai didi

iis-7 - bundle 不适用于映射的虚拟目录

转载 作者:行者123 更新时间:2023-12-01 01:12:23 27 4
gpt4 key购买 nike

我们有一个站点,其中 CSS 和 JavaScript 被 bundle 到 /Content//Scripts/目录分别。这两个也是单独域中虚拟目录的映射目标,用于静态资源(因此不提供 cookie)。

问题是,在我们的生产环境中,compilation -> debug设置为 false(因此启用了 bundle 和缩小),相对 URL 工作正常并从 bundle 系统提供服务,但静态域 URL(使用指向同一位置的虚拟目录)产生 HTTP 404 errors .

有没有办法配置 IIS 以允许 bundle 处理此虚拟目录的内容?我的愿景是必须为静态域创建一个单独的虚拟 MVC 项目,以便它识别 bundle ,但想看看是否有更好的解决方案。

以下是来自 IIS 的当前处理顺序似乎是:

  • 接收对( bundle )资源的传入请求,例如[static domain]/Content/all.css
  • 运行任何 HTTP 处理程序,例如如果可用, bundle (在静态域的情况下没有)
  • 如果可用,请遵循虚拟目录并提供资源,即搜索 ([main domain]/Content/all.css )

  • 因为这个文件实际上并不存在于文件系统中,所以 HTTP 404被提出。理想情况下,步骤 2 应该在步骤 之后运行3 .

    非常感谢。

    最佳答案

    我做了一些实验并设法解决了它。不起作用的是将静态站点的根指向主网站的同一个根,如 web.config文件被共享 - 对静态站点所做的任何更改(即禁用 session 状态)也适用于主网站。

    最后,有效的是以下内容:

  • 让静态域指向文件系统上的单独根文件夹。
  • 保持静态站点上的虚拟目录( /Content//Scripts/ )指向它们在主站点上的相应位置。
  • 由于我们使用 Helicon 的 URL 重写器进行缓存破坏,因此创建一个准系统 .htaccess与主站点中使用的规则相同的文件;把它放在静态站点的根目录中。
  • 复制 global.asax文件从主网站到静态网站的根目录。这不能是捷径。
  • 复制/bin/的内容文件夹从主网站进入静态网站。
  • IIS 中的虚拟目录指向 /bin/主网站上的文件夹将不起作用。
  • 在文件系统中创建指向 /bin/ 的快捷方式主网站上的文件夹也不起作用。
  • 在 IIS 中,确保静态站点使用自己的应用程序池,并且配置为 .NET 4.0,集成管道模式。这样 MVC 4 bundle 就可以工作了。
  • 创建准系统 web.configUrlRoutingModule添加。

  • 这是我们的 web.config对于静态站点:
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
    <system.web>
    <customErrors mode="Off">
    </customErrors>
    <sessionState mode="Off" />
    <pages enableSessionState="false" enableViewState="false" enableViewStateMac="false" renderAllHiddenFieldsAtTopOfForm="false" />
    </system.web>
    <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true">
    <remove name="ScriptModule" />
    <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    </modules>
    <urlCompression doStaticCompression="true" doDynamicCompression="true" />
    <security>
    <requestFiltering allowDoubleEscaping="True" />
    </security>
    <tracing>
    <traceFailedRequests>
    <add path="*">
    <traceAreas>
    <add provider="ASPNET" areas="Infrastructure,Module,Page,AppServices" verbosity="Verbose" />
    </traceAreas>
    <failureDefinitions timeTaken="00:00:00" statusCodes="200" />
    </add>
    </traceFailedRequests>
    </tracing>
    <!-- Cache static content for a month, only enable on UAT or Live -->
    <staticContent>
    <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="30.00:00:00"/>
    </staticContent>
    </system.webServer>
    </configuration>

    主要思想是 bundle 需要启用 ASP.NET MVC4 并在静态站点上运行,因为 bundle 是在考虑虚拟目录之前由 IIS 评估的(并且似乎没有办法扭转这种情况)。

    关于iis-7 - bundle 不适用于映射的虚拟目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14593622/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com