我正在开发一个Angular应用程序,并且我已成功将其发布到Elastic Beanstalk。该应用程序工作正常,除了在Angular应用程序导航之外输入特定路线。
例如,如果我输入mywebsite.com/{some_url}
,我会收到404错误。当然,如果我输入mywebsite.com
,那很好,因为服务器只提供index.html
并且应用程序加载。我明白了很多。
我可以和我的用户一起生活,只需要从网站的根目录开始,如果它不是我需要处理的回调。用户通过第三方验证器登录,然后通过回调重定向到我的网站。当然,当加载此重定向uri时,会发出404错误,因为我的Elastic Beanstalk安装并不知道将其路由到哪里。
我需要弄清楚我是如何仍然将Elastic Beanstalk和Angular一起使用的,以便我可以输入特定的URL并加载它们;或者,至少正确地回调负载。我也不想要哈希方法解决方法。我想要漂亮的网址。
答案 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
如此欣喜若狂。