我们需要在不同的IIS服务器上部署Angular 6站点(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 =&gt;工作正常(index.html所在的文件夹)
https://server/test/2.0/module1 =&gt;工作正常
https://server/test/2.0/module1/page1 =&gt;不起作用 - 基本路径设置为https://server/test/2.0/module1
有没有办法使用相对路径并仍然可以解析所有路由?我知道我可以使用哈希策略,但我试图使用位置策略使其工作。
谢谢!