angularjs - Windows 与 Linux 上的 Tomcat/Angular 应用程序和尾部斜杠

标签 angularjs linux windows-7 tomcat7

我有一个问题,我不确定它是否与 angular 或我的服务器 (tomcat 7) 有关。

到目前为止,我一直在我的本地机器上进行开发,这是一个 Windows 机器,到目前为止我已经能够成功部署和运行我的 webapp,没有任何问题。我通过转到 URL 访问该站点:http://localhost:8080/appname

现在我的 Angular 应用程序的 $stateProvider 正确地加载了默认状态(这样 URL 就变成了 http://localhost:8080/appname/#/login )。

我现在部署到我们的测试环境,这是一台 linux 机器(相同的 tomcat7)。当我现在访问 URL:http://test-box:8080/appname 它改为:http://test-box:8080/appname#/

请注意“appname”后缺少尾部斜线。仅加载空白页。我不知道问题出在哪里,是 tomcat 还是 angular,尽管我倾向于后者。

最佳答案

所以我一直没弄清楚为什么这只发生在我的测试环境中,但我确实设法解决了这个问题。我做了以下事情:

  1. 为 Angular 应用启用 html5 模式:

    $locationProvider.html5Mode({
        enabled: true,
        requireBase: true
    });
    

    我将 requireBase 设置为“true”,因为正如我上面提到的,webapp 有一个 appName,这让我想到了第 2 点。

  2. 为确保您的 Angular 应用程序可以使用您的基本应用程序名称,将其添加到您的主 index.html 文件中:

    <base href="/appName/">
    

    确保这是在 <head> 的顶部完成的标签

  3. 以上解决了我的问题,但引入了一个新问题。由于 html5 模式,您将不会再在 URL 中看到#。而现在当你刷新页面时,由于 URL 现在完全由 angular 管理,服务器可能不知道如何处理你试图访问的资源。它甚至可能不存在于服务器端,你会得到一个 404。因此,如果你刷新页面并尝试访问服务器不知道的任何内容(在我的例子中,任何以 appName/api, appName/资源等都可以)它应该被重定向到index.html .这意味着您将需要重写您的 URL。可惜tomcat7不支持这个,只好升级到tomcat8。也可以在 apache 前端服务器上配置 URL 重写。如果您能够做到这一点,请在 tomcat8 中启用 URL 重写 conf/server.xml :

    <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 .

关于angularjs - Windows 与 Linux 上的 Tomcat/Angular 应用程序和尾部斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38485466/

相关文章:

javascript - ng-禁用所有输入元素

linux - 显示 Linux 中父目录下的文件和文件夹详细信息

android - 如何在 Android 中为字符设备驱动程序创 build 备节点?

linux - apt-get 更新和安装 Curl 的问题

css - angularjs 评估范围内样式 ie9 不工作

javascript - 使用日期格式对字符串数组进行排序

c# - 是否有可用于查询脱机文件结果的 API?

windows-7 - 在Windows OS上递归搜索一个字符串

javascript - 从多个输入字段收集 ng-model

visual-studio-2010 - JS文件在VS 2010中不断崩溃