我最近在 Symfony 4 中完成了一个 API,我想将它部署在 AWS 的 Elastic Beanstalk 上进行生产测试。然而,除了能够在 index.php Symfony default page 中访问默认的 Symfony 4 问候语之外。
我无法路由到任何其他逻辑。例如,当尝试使用适用于本地环境的/note/view 时 note/view on local
我在 EB 环境中遇到“ undefined index /注释/ View 不存在”。几乎就像我的 routes.yaml 没有加载一样。
如有任何建议,我们将不胜感激!提前致谢!
最佳答案
确保您的 public
目录中有 .htaccess
文件(至少在您的 EC2 实例上 - EB 创建的实例 -)
您的本地可能不需要它(如 nginx),但是,EB PHP 随 apache 开箱即用。您需要确保您的代码也适用于 apache。
只是为了验证这个理论,访问由 EB 创建的 EC2 实例(如果您不知道如何操作,请参见下文);
cd/var/app/current/public
~ nano .htaccess
将以下内容粘贴到文件中;
`
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
<IfModule !mod_rewrite.c>
<IfModule mod_alias.c>
RedirectMatch 302 ^/$ /index.php/
</IfModule>
</IfModule>
请注意,这只是 apache 的基本重写以测试该理论。您可以根据项目的需要向该文件中添加更多内容。
- 重启apache;
sudo service httpd restart
- 测试一下!
或者,除了 cd/var/app/current/public
,您还可以执行 cd/var/www/html/public
,因为它是 的符号链接(symbolic link)>/var/app/current/public
如何访问 EB 生成的 EC2 实例
- 转到 AWS 控制台 -> Elastic Beanstalk -> 您的应用程序 -> 您的环境
- 进入环境仪表板后,点击左侧的“配置”
- 找到“安全”框并单击“修改”。
- 在“虚拟机权限”下选择您的“EC2 key 对”并保存。
- 转到 EC2 -> Instances 并找到您的 EC2 实例的公共(public) DNS (IPv4) 并使用它来访问您的 EC2 key 对(pem 文件)
您需要稍等片刻才能登录。
PS 当然,EBS 背后的主要思想之一是您不需要通过 SSH 连接到您的实例。然而,这只是为了测试理论,有时对于 AWS,您需要采用跟踪和错误的方式。我不知道此应用程序的设置,也不知道 EBS 的整个设置及其工作流程。如果这要解决您的问题,您只需将 .htaccess
包含到您的项目中就可以了。
关于php - 在 AWS Elastic Beanstalk 上运行的 Symfony 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52722596/