如何处理通过Elastic Beanstalk托管的Angular应用程序的路由而不进行散列

时间:2017-11-06 18:56:27

标签: angular routing elastic-beanstalk

我正在开发一个Angular应用程序,并且我已成功将其发布到Elastic Beanstalk。该应用程序工作正常,除了在Angular应用程序导航之外输入特定路线。

例如,如果我输入mywebsite.com/{some_url},我会收到404错误。当然,如果我输入mywebsite.com,那很好,因为服务器只提供index.html并且应用程序加载。我明白了很多。

我可以和我的用户一起生活,只需要从网站的根目录开始,如果它不是我需要处理的回调。用户通过第三方验证器登录,然后通过回调重定向到我的网站。当然,当加载此重定向uri时,会发出404错误,因为我的Elastic Beanstalk安装并不知道将其路由到哪里。

404 Error from callback

我需要弄清楚我是如何仍然将Elastic Beanstalk和Angular一起使用的,以便我可以输入特定的URL并加载它们;或者,至少正确地回调负载。我也不想要哈希方法解决方法。我想要漂亮的网址。

1 个答案:

答案 0 :(得分:0)

我最终做的事情出人意料。采取了一种非常迂回的方式来确定我需要做什么,但我终于想通了。

了解您的Elastic Beanstalk实例正在运行的代理服务器非常重要。对我来说,代理服务器实际上是Apache(我最初认为它是nginx)。一旦我发现我的代理服务器是Apache,我就引用了Angular关于解决Apache生产服务器的SPA路由问题(Server Configuration)的文档。从那里,我按照AWS'的建议,将推荐的代码复制到apache.config目录下的名为.ebextensions的文件中。 EB文档。

从我的Angular项目目录.ebextensions/apache.config

的基础
files:
    "/etc/httpd/conf.d/spa_redirect.conf":
        mode: "000644"
        owner: root
        group: root
        content: |
            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

如此欣喜若狂。