任何人都可以就如何配置Tomcat从而避免使用404提供建议,而是在找不到页面时(特别是在应触发404的情况下)返回index.html内容和200作为状态吗? 让我告诉你我为什么要这样做:
当用户点击“ www.app.exmpl / app”应用后,我们正确地显示了角度应用程序“ www.app.exmpl / app”并返回了200。返回了带有角度应用代码的index.html。
当用户点击“ www.app.exmpl / app / some_unexisted_url_in_file_system_path”时,tomcat会尝试查找可以提供此url的终结点或html文件,并返回404,并且在web.xml中,我们具有以下配置:>
<error-page>
<error-code>404</error-code>
<location>/index.html</location>
</error-page>
这会导致用户收到404响应,但仍然会加载网络应用 正确,因为index.html中和加载页面后都包含有角度的应用程序 将网址改写为正确的网址,例如:“ www.app.exmpl / app”。
因此,总而言之,我只需要摆脱404并将其全部替换为200并在这种情况下仅呈现index.html内容。这种情况下的最佳做法是什么?
答案 0 :(得分:2)
没有服务器上的重定向规则,应用程序深层链接将无法工作。服务器必须将所有深层链接重定向到应用程序index.html
。
设置tomcat以重定向任何深层链接-
1。在server.xml中配置RewriteValve
编辑〜/ conf / server.xml以在主机部分中添加以下Valve,如下所示–
...
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />
...
</Host>
...
2。将重写规则写入rewrite.config
创建目录结构–〜/ conf / Catalina / localhost /并使用以下内容在其中创建rewrite.config文件。注意-在这里,我考虑将/app
作为问题中提到的应用程序的上下文路径。
RewriteCond %{REQUEST_PATH} !-f
RewriteRule ^/app/(.*) /app/index.html
设置完成后,重新启动tomcat服务器,您可以单击应用程序的深层链接,这些链接将路由到angular应用程序内的正确组件。
您可以参考this post以获得更多详细信息。
答案 1 :(得分:0)
当错误页面不是静态页面,而是JSP页面(或Servlet)时,它可以更改响应状态(response.setStatus(200)
)并提供静态文件(转发至静态文件或包括静态文件)。 / p>
尽管我猜想在像您这样的用例中,使用302
(客户端重定向)响应(如response.sendRedirect(application.getContextPath() + "/index.html")
)更合适。
答案 2 :(得分:-2)
您能否提供有关您的Routing Strategy
的更多详细信息。
好吧,我想您必须使用此{useHash: true}
这可能是一种情况,如果您没有使用{useHash: true}
,并且在重新加载它时搜索URL路径中的特定文件,
您可以在https://thinkster.io/tutorials/angular-2-routing-navigation