我有一个问题,我不确定是否与angular或我的服务器(tomcat 7)有关。
到目前为止,我一直在我的本地计算机上进行开发,这是一个Windows框,到目前为止我已经能够成功部署和运行我的webapp而没有任何问题。我通过转到网址访问该网站:http://localhost:8080/appname
现在,我的angular应用程序的$ stateProvider正确加载默认状态(以便URL变为http://localhost:8080/appname/#/login)。
我现在部署到我们的测试环境,这是一台linux机器(同样的tomcat7)。当我现在去网址时:http://test-box:8080/appname 它改为:http://test-box:8080/appname#/
注意" appname"之后缺少的尾部斜杠。只加载空白页面。虽然我倾向于后者,但我不知道问题可能在哪里,tomcat或有角度。
答案 0 :(得分:0)
所以我从来没有弄清楚为什么这只发生在我的测试环境中,但我确实设法解决了这个问题。我做了以下事情:
为角度应用启用html5模式:
$locationProvider.html5Mode({
enabled: true,
requireBase: true
});
我将requireBase视为'true',因为正如我上面提到的,webapp有一个appName,它引导我进入第2点。
要确保您的角度应用可以使用您的基本应用名称,请将其添加到您的主index.html文件中:
<base href="/appName/">
确保在<head>
标记
上面解决了我的问题,但又引入了一个新问题。由于html5模式,您将不再在您的网址中看到#。现在,当您刷新页面时,由于URL现在完全由角度管理,因此服务器可能不知道如何处理您尝试访问的资源。它甚至可能不存在于服务器端,你将获得404.所以,如果你刷新页面并尝试访问服务器不知道的任何东西(在我的例子中,任何以appName / api开头的东西,appName / resourc等等都可以)它应该被重定向到index.html
。这意味着您需要重写URL。不幸的是,tomcat7不支持这个,所以我不得不升级到tomcat8。也可以在apache前端服务器上配置URL重写。如果能够这样做,在tomcat8中启用conf/server.xml
中的URL重写:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />
然后创建一个名为conf/rewrite.config
的新文件,其中包含:
RewriteCond %{REQUEST_URI} ^/appName/(api|resource).*$
RewriteRule ^.*$ - [L]
RewriteRule ^.*$ /appName/index.html [L,QSA]
这表示以api/*
或resource/*
开头的所有内容都可以,其他所有内容都必须重定向到index.html
。