我试图在我的本地apache tomcat 8服务器上部署我的角度应用程序。
我使用了ng build --prod并在此复制粘贴dist的结果。
我将<base href="/caquiweb/">
添加到我的index.html。
因此,我可以访问我的应用程序,路由工作,但404在手动将浏览器中的URL更改为定义的路由器路由时。
Working url by using routerLink
404 manually changing from browser
我认为我必须配置我的服务器,但我真的不知道该怎么做。
提前致谢
答案 0 :(得分:2)
从我的角度来看最简单的解决方案:
WEB-INF/web.xml
中添加tomcat/webapps/caquiweb
,其中包含以下内容:
<web-app>
<error-page>
<error-code>404</error-code>
<location>/index.html</location>
</error-page>
</web-app>
这样,每次找不到URL时,Tomcat都会重定向到index.html
,然后导致Angular使用组件路由器来处理它。
答案 1 :(得分:0)
此问题是由于角度应用程序中的PathLocationStrategy路由所致。
应用程序的上下文路径为/caquiweb/
。
您在index.html中设置的应该是-<base href="/">
您必须使用-ng build --base-href /caquiweb/
您必须按如下所示配置到应用程序根目录index.html的深层链接的重新路由-
server.xml-
...
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />
...
</Host>
...
rewrite.config-(位置-{tomcatHome} / conf / Catalina / localhost)
RewriteCond %{REQUEST_PATH} !-f
RewriteRule ^/caquiweb/(.*) /caquiweb/index.html
有关详细说明,请参阅文章-Fixing deep linking issue – Deploying angular application on Tomcat server
答案 2 :(得分:0)
您可以按照这篇精彩博文中所述以编程方式配置重写:https://levelup.gitconnected.com/packaging-your-spring-boot-and-angular-2-projects-together-a13a9c5efdb7。
这种方法的优点是您无需更改服务器上的任何内容。您需要更改的唯一文件是您的部署描述符文件,在本例中是您的 web.xml 文件,用于注册您的过滤器。另一个优点是您可以赋予 angular 仅处理其路线的能力。因此,如果您尝试访问资源,例如服务器中的文件或端点,而该资源不存在,您将得到真正的 404。