Правила переписывания - Различайте Angular #!и угловой без #! - PullRequest
0 голосов
/ 01 декабря 2018

Как мне написать правила перезаписи в IIS для обработки этих сценариев:

Структура папки:

[AngularApp1]
  -- app.js
  -- appController.js
  -- index.html
[AngularSecondApp]
  -- app.js
  -- appController.js
  -- index.html
[DomainSubApp]
  -- app.js
  -- appController.js
  -- index.html
favicon.ico
gulpfile.js
web.config

AngularApp1 is NOT HTML5 настроен и использует префикс DEFAULT #!.Таким образом, страницы обычно выглядят так: https://(www.)?mywebsite.com/#!/state...

AngularSecondApp IS , настроенный в режиме HTML5 , и использует NO '' hashPrefix.Таким образом, страницы обычно выглядят так: https://(www.)?mywebsite.com/state...

DomainSubApp настроен NOT HTML5 настроен и использует префикс DEFAULT #!,Страницы обычно выглядят так: https://domainsubapp.mywebsite.com/#!/state...

Маршрутизация

Сервер должен использовать AngularSecondApp/index.html, если:

  • субдомен '' или'www' И ...
  • URI?это: ^/\w+/?.*$ - но не файлы

...

Сервер должен использовать DomainSubApp/index.html, если:

  • поддомен: DomainSubApp

...

В противном случае сервер должен использовать AngularApp1/index.html ВКЛЮЧАЯ:

  • субдомен '' или 'www' И ...
  • URI?это: ^/(#!/.*)?$ - но не файлы

Моя личная путаница

Я понимаю, что вам нужно учитывать ФАЙЛЫ.Например, http://mywebsite.com/favicon.ico или http://mywebsite.com/someFile.ext или http://mywebsite.com/scripts/scriptFile.js.Поэтому некоторые из моих попыток потерпели неудачу, потому что мои паттерны были слишком общими.Таким образом, запросы на файлы были также переписаны / перенаправлены.

Нужно ли что-либо делать, чтобы обеспечить сохранение угловой маршрутизации?Итак, если я перейду к http://mywebsite.com/route/param1/param2, это должно быть переписано / перенаправлено на http://mywebsite.com/AngularSecondApp/index.html Куда уходит route/param1/param2?

Что я БЫЛ :

Iпроизнесите "Пришло", потому что мне ранее требовалась подпапка в URL-адресе с именем AngularSecondApp, например: https://(www.)?mywebsite.com/AngularSecondApp/state....Это сделало вещи проще.Но руководство хочет, чтобы я избавился от этой подпапки в URL, отсюда и эта проблема.

Итак, вот что у меня было:

    <clear />
    /*https forced redirect is here... irrelevant*/

    <rule name="AngularSecondApp rewrite" stopProcessing="true">
      <match url="^AngularSecondApp/.*$" />
      <conditions logicalGrouping="MatchAll">
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
      </conditions>
      <action type="Rewrite" url="/AngularSecondApp/index.html" />
    </rule>

    <rule name="AngularApp1 redirect">
      <conditions>
        <add input="{REQUEST_URI}" pattern="^(/AngularApp1)?/index\.html$" ignoreCase="true" />
      </conditions>
      <action type="Redirect" url="/" />
    </rule>

    <rule name="AngularApp1 rewrite">
      <conditions>
        <add input="{REQUEST_URI}" pattern="^/$" />
      </conditions>
      <action type="Rewrite" url="/AngularApp1/index.html" />
    </rule>

1 Ответ

0 голосов
/ 05 декабря 2018

В качестве артефакта прошедшего дня в Переписанных мною «HAD» был включен редирект на случай, если люди непосредственно посещали страницу index.html.Кроме того, у меня сложилось впечатление, что любая перезапись, с которой вы выполняли действия (поэтому перезапись / в index.html), должна иметь перенаправление.Это было неправильно.

Поэтому, после комментария GeorgeAWG, я закончил тем, что отказался от перенаправлений и делал только переписывания.Это упростило мою жизнь и, возможно, могло просто сделать жизнь каждого.

    <rule name="AngularSecondApp rewrite">
      <conditions>
        <add input="{REQUEST_URI}" pattern="^(/\w+)+/?$" />
      </conditions>
      <action type="Rewrite" url="/AngularSecondApp/index.html" />
    </rule>

    <rule name="AngularApp1 rewrite">
      <conditions>
        <add input="{REQUEST_URI}" pattern="^/$" />
      </conditions>
      <action type="Rewrite" url="/AngularApp1/index.html" />
    </rule>

Так что, если URI запроса начинается с символов слова, он будет переписан во второе приложение.

Я не уверенкак работает AngularApp1 ... потому что он работает для root /, но он также работает для /#!/route... Но он не сбрасывает файлы, такие как /scripts/lol.js.Поэтому мой ответ решает проблему, но не хватает понимания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...