我会通过以下步骤告诉你会发生什么:
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?
似乎重写规则不起作用。试试这些规则:
#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