我正在尝试在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
,然后处理程序捕获它并将其转发给 Django,Django 不知道/admin/base.css
是什么并返回 404。
我尝试/static
虚拟目录指向与根目录相同的物理目录。这导致了各种冲突,因为我的根Web.config
被读取了两次,导致各种重复的密钥冲突(对于我定义的所有密钥,或多或少)。
我将不胜感激任何关于摆脱这种情况的帮助。
我最终通过重组我的静态资源文件夹并添加一个包含 Admin 静态文件的实际static
子文件夹来完全避免这个问题。
我将不再能够使用manage.py collectstatic
进行前端部署,但是,我需要创建一个额外的脚本。哦,好吧。