Нам нужно развернуть сайты 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
Есть ли способиспользовать относительный путь и все еще получить все маршруты, которые будут разрешены?Я знаю, что могу использовать хэш-стратегию, но я пытался заставить ее работать, используя стратегию определения местоположения.
Спасибо!