【问题标题】:IIS rewrites and handlers conflictIIS 重写和处理程序冲突
【发布时间】:2017-03-29 21:51:18
【问题描述】:

我正在尝试在 IIS 下设置 Django/Angular 应用程序。

当我在 nginx 下设置类似的应用程序时,我会将所有以 /api(我的后端)或 /admin(Django 管理界面)开头的 URL 传递给 Django。我还设置了两个位置://static - 两者都是包含所有静态资源的文件夹的别名。

我也需要别名 /static,因为 Django 的管理应用程序引用 /static/admin/... 的资源

我无法让 IIS 以同样的方式工作。我使用wfastcgi 与Django 交互,并使用重写规则将/static 映射回/。这是我的Web.config 的相关部分:

<rewrite>
    <rules>
        <rule name="Static Perfix" stopProcessing="true" >
            <match url="^static/(.+)" />
            <action type="Rewrite" url="{R:1}" />
        </rule>
    </rules>
</rewrite>
<handlers>
    <add name="Admin" 
         path="/admin" 
         verb="*" 
         modules="FastCgiModule" 
         scriptProcessor="..." 
         resourceType="Unspecified" />
</handlers>

这不起作用。当我访问/admin 时,处理程序会捕获它并将请求转发给 Django,这是应该的。 Django 返回一个 html 页面,其资源位于 /static/admin/base.css(例如)。

当浏览器尝试加载这样的资源时,重写规则会捕获它,将其重写为/admin/base.css,然后处理程序捕获它并将其转发给不知道/admin/base.css 是什么的Django,并返回一个404.

我尝试将/static 设为虚拟目录,指向与根目录相同的物理目录。这导致了各种冲突,因为我的根 Web.config 被读取了两次,导致各种重复键违规(对于我定义的所有键,或多或少)。

对于摆脱这种情况的任何帮助,我将不胜感激。

【问题讨论】:

    标签: django iis url-rewriting wfastcgi


    【解决方案1】:

    我最终完全避免了这个问题,重组了我的静态资源文件夹并添加了一个包含管理静态文件的实际 static 子文件夹。

    我将无法再使用manage.py collectstatic 进行前端部署,但我需要创建一个额外的脚本。哦,好吧。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-04
      • 1970-01-01
      • 2022-12-31
      • 2016-12-11
      • 1970-01-01
      相关资源
      最近更新 更多