刷新浏览器Angular应用无法正常工作。当我将应用程序部署到Tomcat中时出现404错误

时间:2019-02-21 09:41:13

标签: angular tomcat angular6 production-environment

我正在尝试弄清楚如何设置Apache Tomcat服务器以在页面刷新时提供角度应用程序。

仅当我单击时,路由才起作用,但是如果手动输入路径或刷新页面,则会给我404错误。

  

HTTP状态404 –找不到

1)使用以下命令构建角度应用程序:

ng build --prod --base-href ./

2)另外我在apache tomcat中添加了重写规则

在$ ApacheLocation / conf / context.xml

<Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />

在$ ApacheLocation / conf / server.xml

<Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />

但是它对我不起作用。

我将不胜感激。

5 个答案:

答案 0 :(得分:1)

我找到了问题的解决方案,并且解决了问题。

这是解决问题的步骤。

1)在我的有角src文件夹中创建“ WEB-INF / web.xml”,路径如下

Your_Folder/src/WEB-INF/web.xml

2)在web.xml的以下行中,

<web-app> 
    <error-page> 
        <error-code>404</error-code> 
        <location>/index.html</location> 
    </error-page> 
</web-app>

3)将外部文件夹添加到angular.json中,以便在构建应用程序时将其添加到dist文件夹中,

在angular.json中

"assets": [ "src/assets","src/favicon.ico","src/WEB-INF" ]

4)使用以下命令构建应用程序,

ng build --prod --base-href=/myApp/

5)将dist文件夹重命名为base-href

6)复制distbase-href文件夹并粘贴到

apache-tomcat-8.5.37/webapps

7)启动tomcat,即使刷新浏览器后,您的应用程序也将运行。

答案 1 :(得分:0)

我不是Apache的专家,但这就是我的发现。 如图所示

,将重写规则添加到.htaccess文件。
RewriteEngine On
# If an existing asset or directory is requested go to it as it is
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

您可以阅读更多内容 https://ngmilk.rocks/2015/03/09/angularjs-html5-mode-or-pretty-urls-on-apache-using-htaccess/ 要么 https://angular.io/guide/deployment#fallback-configuration-examples

答案 2 :(得分:0)

我也有同样的问题。让我告诉我如何解决这个问题。

在项目文件夹中创建WEB-INF文件夹。并创建rewrite.config文件。

/WEB-INF/rewrite.config

RewriteCond %{SERVLET_PATH} !-f
RewriteRule ^/(.*)$ /index.html [L]

答案 3 :(得分:0)

您可以在app.module.ts中使用以下HashLocationStrategy

providers: [
    { provide: LocationStrategy, useClass: HashLocationStrategy }
  ],

通过使用哈希位置策略,您的应用程序上下文和路由将由http://localhost:4200/myapp/#/route中的Hash(#)分隔。

这样可以解决404错误。我们也有PathLocationStrategy,但是我无法使其正常工作。

答案 4 :(得分:0)

您刚刚在server.xml中配置了RewriteValve。除此之外,您还需要在rewrite.config中编写重写规则。

rewrite.config -

RewriteCond %{REQUEST_PATH} !-f
RewriteRule ^/(.*) /index.html

以上规则是告诉tomcat将任何请求(深链接请求)重定向到应用程序的index.html。从这里角度将接管并路由到要显示的正确组件。

我建议将应用程序托管在tomcat上的单独上下文路径中,而不是在根目录中。有关详细信息,请参见此博客-Fixing deep linking issue – Deploying angular application on Tomcat server