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

时间:2017-04-20 03:08:27

标签: java apache angular tomcat mod-rewrite

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

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?

2 个答案:

答案 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());
  }
}