我将通过以下步骤告诉您会发生什么:
1)我的应用项目基于Angular 4.0.2。我正在使用路由。这些是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浏览器,然后输入地址栏 本地主机:8080 /距离/ 登录界面显示有2个文本框(用户和密码)和一个登录按钮。
9)当我按下用户按钮并传递有效时。它转到仪表板屏幕,我看到地址栏更改为: 本地主机:8080 / DIST /仪表板
10)之后,我去地址栏,我手动编写:localhost:8080 / dist / dashboard。
然后我按Enter键,它出现错误404.
它应该继续显示仪表板屏幕而不是错误404.
这个应用程序在.htaccess的Apache服务器上运行良好,但在Tomcat 9中运行不正确
如果我配置了rewrite.config,为什么在这种情况下不显示仪表板屏幕?缺少什么以避免错误404?
答案 0 :(得分: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
答案 1 :(得分:0)
感谢上述解决方案,使用angular 11和tomcat 9,刚刚(2021),我已经尝试过它们,但没有结果。 然后我找到了一种不同的方法,都是在与 angular 应用程序的战争中。
在 web.xml 中
<error-page>
<error-code>404</error-code>
<location>/r404</location>
</error-page>
在java源代码中:
@WebServlet(urlPatterns = {"/r404/*"})
public class R404Servlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.sendRedirect(request.getContextPath());
}
}