0

我想请求您帮助如何在 AWS 上为Cakephp Web 应用程序正确设置路由。我让 Cakephp 在 AWS Elastic Beanstalk 上运行,使用 PHP 配置,然后我为我的域(例如foo.com)设置了一条 A 记录,该记录链接到 Cloudfront CDN,该 CDN 链接到 Beanstalk 的默认 ELB。一切正常,直到我发现 Cakephp 处理的所有重定向都将重定向到 ELB ( elb-abc123.elb.amazonaws.com/page/) 的默认公共 DNS 而不是foo.com/page/. 我知道 elb 有一个叫做 CName 的东西,但我无法让它工作(http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/using-domain-names-with-elb.html?)。而且我不确定这是否与.htaccess 有关。

这是我的域的路由 53 设置:

foo.com. A ALIAS examplecode.cloudfront.net (examplecode...)
www.foo.com. A ALIAS examplecode.cloudfront.net (examplecode...)

和可能前设置:

Alternative Domain Names (CName): foo.com, www.foo.com

好的,这是我所面临的一个示例:
架构:客户端->cloudfront->elb(beanstalk)->EC2
1. 当客户端类型foo.comwww.foo.com在他/她的浏览器中时一切正常。
2. 当客户端尝试请求安全页面foo.com/account/index(例如帐户页面)时,Cakephp 会要求登录,因此重定向由 cakephp 控制器处理:$this->redirect(array('controller' => 'secure', 'action' => 'login'));
3. 预期的登陆 url 应该是foo.com/secure/login/bur 结果是elb-abc123.elb.amazonaws.com/secure/login.

谁能帮帮我,谢谢。

4

1 回答 1

1

检查 的返回值env('HTTP_HOST'),这是 CakePHP 默认使用的基本 URL。它可能会返回elb-abc123.elb.amazonaws.com

如果您无法更改该行为,则根据您的 CakePHP 版本,使用FULL_BASE_URLApp.fullBaseUrl自行Router::fullBaseURL()定义正确的基本 URL。

$s = null;
if (env('HTTPS')) {
    $s = 's';
}
$fullBaseUrl = 'http' . $s . '://foo.com';

在你的index.php

define('FULL_BASE_URL', $fullBaseUrl);
Configure::write('App.fullBaseUrl', FULL_BASE_URL);

或在任何时候(假设Router课程可用):

Router::fullBaseUrl($fullBaseUrl);
于 2013-12-01T18:28:54.283 回答