IIS переписывает и обрабатывает конфликт
Я пытаюсь настроить приложение Django/Angular под IIS.
Когда я устанавливаю аналогичное приложение под nginx, я передаю все URL, начинающиеся с /api
(мой бэкэнд) или /admin
(интерфейс администратора Django) для 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, который не знает, что /admin/base.css
есть и возвращает 404.
Я пытался сделать /static
Виртуальный каталог, указывающий на тот же физический каталог, что и корневой каталог. Это вызвало все виды конфликтов, потому что мой корень Web.config
был прочитан дважды, вызывая всевозможные нарушения повторяющихся ключей (для всех ключей, которые я определил, более или менее).
Буду признателен за любую помощь по выходу из этой ситуации.
1 ответ
В итоге я полностью избежал этой проблемы, реструктурировав папку статических ресурсов и добавив фактическую static
подпапка, содержащая статические файлы Admin.
Я больше не смогу использовать manage.py collectstatic
однако для развертывания интерфейса мне потребуется создать дополнительный сценарий. Ну что ж.