具有绝对基础href和模块的角度路由

时间:2018-06-13 13:05:01

标签: angular2-routing angular6

我们需要在不同的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

有没有办法使用相对路径并仍然可以解析所有路由?我知道我可以使用哈希策略,但我试图使用位置策略使其工作。

谢谢!

0 个答案:

没有答案