我正在尝试弄清楚如何设置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" />
但是它对我不起作用。
我将不胜感激。
答案 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)复制dist
或base-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