使用带有Valve的Tomcat 9上的路由使用Angular 4时出错404

问题描述 投票:0回答:1

我会通过以下步骤告诉你会发生什么:

1)我有基于Angular 4.0.2的app项目。我正在使用路由。这些是我在app.module.ts中的路线:

const routes: Routes =
[
{ path: '', component: LoginComponent },
{ path: 'dashboard',  component: DashboardComponent }, 
{ path: 'login',  component: LoginComponent }
];

因此,Web应用程序的第一个屏幕是Login。

2)我执行了命令ng build -prod

3)我将文件夹dist移动​​到Tomcat webapps文件夹中

4)我修改了文件index.html更改基本href。现在是

5)在/Tomcat9/conf/context.xml中,我添加了以下指令:

<Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />

6)我创建了文件夹WEB-INF,然后我创建了文件rewrite.config,该文件包含:#如果请求现有资产或目录,请按原样访问它

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
RewriteRule ^ - [L]

# If the requested resource doesn't exist, use index.html
RewriteRule ^ /index.html

7)我启动了Tomcat服务器

8)接下来我打开了一个Mozilla浏览器,我输入了地址栏localhost:8080 / dist /它出现了带有2个文本框(用户和通行证)和一个登录按钮的登录屏幕。

9)当我用用户按下按钮并传递有效时。它进入仪表板屏幕,我看到地址栏变为:localhost:8080 / dist / dashboard。

10)之后,我去地址栏,我手动编写:localhost:8080 / dist / dashboard。

然后我按Enter键,它出现错误404。

它应该继续显示仪表板屏幕而不是错误404。

这个应用程序适用于.htaccess的Apache服务器,但不适用于Tomcat 9

如果我配置了rewrite.config,为什么在这种情况下不显示仪表板屏幕?缺少什么以避免错误404?

java apache angular tomcat mod-rewrite
1个回答
0
投票

似乎重写规则不起作用。试试这些规则:

#Check if the uri ends with an file extension
RewriteCond %{REQUEST_URI} .*\.(.*)$ [OR]

#Check if the uri contains /api/
RewriteCond %{REQUEST_URI} ^(.*)(/api/).*$ [OR]
RewriteRule ^(.*)$ - [L]

#If the requested resource doesn't exist, use index.html
RewriteRule ^(.*)$ /index.html
© www.soinside.com 2019 - 2024. All rights reserved.