Угловая маршрутизация с абсолютной базой HREF и модулями - PullRequest
0 голосов
/ 13 июня 2018

Нам нужно развернуть сайты Angular 6 на разных серверах IIS (dev / qa / prod / etc.).Маршруты определены в модулях:

export const appRoutes: Routes = [
    { path: 'module1', loadChildren: './modules/module1#Module1' },
    { path: 'module2', loadChildren: './modules/module2#Module2' },
    { path: 'module3', loadChildren: './modules/module3#Module3' },
    { path: '', pathMatch: 'full', redirectTo: 'module1' },
];

Поскольку базовый путь будет разным на всех серверах, мы использовали его для задания относительного URL:

<base href="./">

IIS настроен на перезаписьURL для отправки на страницу индекса в соответствующей подпапке.

<rule name="Angular Routes" enabled="true" stopProcessing="true">
    <match url="(.*)/\b(module1|module2|module3)?(/.*)?" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
    </conditions>
    <action type="Rewrite" url="{R:1}/" />
</rule>

Перезапись работает нормально.Я проверил полученные маршруты, используя страницу aspx, и она работает, как и ожидалось.

Проблема, похоже, связана с базовым href.Если я напишу абсолютный путь, все маршруты работают нормально.Мы можем обновить страницу и перенаправить на нужную угловую страницу.Но если я использую относительный путь './', он работает не во всех случаях.

https://server/test/2.0 => отлично работает (папка, в которой находится index.html)

https://server/test/2.0/module1 => отлично работает

https://server/test/2.0/module1/page1 => не работает - базовый путь установлен на https://server/test/2.0/module1

Есть ли способиспользовать относительный путь и все еще получить все маршруты, которые будут разрешены?Я знаю, что могу использовать хэш-стратегию, но я пытался заставить ее работать, используя стратегию определения местоположения.

Спасибо!

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