我有一个简单的应用程序与一个组件,期望从URL的某些参数。应用程序中只有一条路由:
const appRoutes: Routes =
path: 'hero/:userId/:languageId',component: HeroWidgetComponent }];
在索引中。html,我在头中有这个<base href="/">
我使用的是webpack,应用程序在开发环境中运行良好,浏览url时:http://localhost:4000/hero/1/1
。
但是,当构建用于生产的应用程序并获取分发文件时,然后将其托管在IIS上。我在尝试浏览相同的URL时出现以下错误:
HTTP Error 404.0 - Not Found
The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.
如果我删除所有路由并浏览,应用程序工作正常:IIS上的http:localhost:4200
。
6条答案
按热度按时间dm7nw8vv1#
我们必须使IIS回退到索引。HTML中添加重写规则。
**第一步:**安装IIS URL Rewrite模块
**第二步:**在web上添加重写规则。配置
hgqdbh6s2#
**第三步:**添加web。配置链接到angular。json:(因为在ng build之后它会被跳过)
wwwo4jvm3#
如果在默认网站下面使用的IIS应用程序(如
myApp
)(那么应用程序的URL应该具有语法http://localhost/myApp/my-angular-route),那么您应该尝试将操作修改为然后它为我的环境工作,没有任何问题。
一步一步的说明可以在这里找到:https://blogs.msdn.microsoft.com/premier_developer/2017/06/14/tips-for-running-an-angular-app-in-iis/
cczfrluj4#
通过在baseurl后添加#修改Angular 路由:
http://localhost:4200/yourApp #/subPageRoute
在应用路由中。module.ts与RouterModule联机。forRoot add“,{ useHash:真}”
这样,IIS会认为#后面的所有内容都是页面上的某个id,并忽略它。
gcxthw6b5#
不安装IIS URL重写
正如@tftd在对问题的评论中所解释的那样,IIS需要知道在找不到匹配的文件或文件夹时如何处理请求。
您可以将IIS配置为返回 index。html 每当请求具有路径和/或参数的路由(也称为 * 深度链接 *)时。
在IIS中手动操作
1.在IIS管理器中选择站点
1.打开 IIS 部分中的 * 错误页 * 图标
1.打开状态代码 404 列表项
1.选择 * 执行此站点上的URL * 单选按钮
1.输入SPA根路径,例如:联系我们
1.单击确定x1c 0d1x
不需要重新启动应用程序池,只需浏览到您的深层链接。服务器将以状态代码200响应。(在2021年的Windows Server 2016和IIS 10上测试)。
如果您的SPA不是以 /index为根。html,输入步骤5中应用的根目录文件夹或文件。
上述手动过程添加或更改 *web的 httpErrors 部分。配置 *:
为了避免在下一次部署后丢失此更改,请确保您的发布管道在 *web中保留 httpErrors 部分,如上面所示。配置 *。
这适用于 Angular 和 React 应用程序。
kkih6yb86#
复制并粘贴此网页。配置到根文件夹