gpt4 book ai didi

cakephp - 在 cakephp ssl 站点路由中重定向到 http 而不是 https

转载 作者:太空宇宙 更新时间:2023-11-03 13:09:57 24 4
gpt4 key购买 nike

我开发了一个 cakephp 网站,所有页面都应该使用 ssl。它按预期工作,除非我在 Controller 中使用重定向时它重定向到 http://subdomain.domain.com 而不是 https://subdomain.domain.com/controller/action。

我已经通过为指向 cakephp 应用程序的端口 80 创建一个虚拟主机并在 .htaccess 中添加这些重写规则来解决这个问题

RewriteCond %{HTTPS} 关闭重写规则 (.*) https://% {HTTP_HOST}%{REQUEST_URI} [L]

这会捕捉到这种情况并重定向到 https,但这会给服务器带来不必要的额外流量。

造成这种额外流量的原因是重定向功能,因为它会生成错误的网址。我查看了重定向函数,它调用 router::url 来创建实际的 url。但是我无法弄清楚如何或在何处指示路由器使用 https 而不是 http。

蒂姆

最佳答案

我在猜测,但我怀疑正是这个 RewriteRule 把事情搞砸了。

您应该“重定向”而不是“重写”。 Cake 生成的链接通常是相对于根目录的,因此除非您将“true”作为第二个参数传递,否则不要指定协议(protocol)。

我还让 apache 监听 80 和 443,这样我至少可以响应不正确的请求。

这是我在 AppController 类中执行相同操作的代码:

function beforeFilter() {
parent::beforeFilter();
$this->_setupSecurity();
}

function _setupSecurity() {
$this->Security->blackHoleCallback = '_badRequest';
if(Configure::read('forceSSL')) {
$this->Security->requireSecure('*');
}
}

/**
* The main SecurityComponent callback.
* Handles both missing SSL problems and general bad requests.
*/

function _badRequest() {
if(Configure::read('forceSSL') && !$this->RequestHandler->isSSL()) {
$this->_forceSSL();
} else {
$this->cakeError('error400');
}
exit;
}

/**
* Redirect to the same page, but with the https protocol and exit.
*/

function _forceSSL() {
$this->redirect('https://' . env('SERVER_NAME') . $this->here);
exit;
}

我在 bootstrap.php 中也有自己的配置“forceSSL”选项,用于根据环境打开和关闭它,因此需要将其设置为 true 才能使上述工作正常。

关于cakephp - 在 cakephp ssl 站点路由中重定向到 http 而不是 https,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4472648/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com