zend https重定向所有请求

时间:2012-06-22 18:04:58

标签: php zend-framework .htaccess https apache2

我想将所有请求重定向到我的zend Web应用程序到https网址 我在.htaccess文件中尝试过此操作并获得无限重定向

RewriteEngine On

RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

任何想法?到目前为止,我已经尝试了几件事,但没有一件事能够持续发挥作用。

1 个答案:

答案 0 :(得分:3)

如果我复制你的规则,我似乎不会以无限重定向结束,它可以正常工作。

这是我用来强制https的ZF插件,而不是.htaccess。你可以尝试一下,看看它是否有效:

<?php

class Application_Plugin_SslCheck extends Zend_Controller_Plugin_Abstract
{
    public function routeShutdown(Zend_Controller_Request_Abstract $request)
    {
        $sslModules = array('admin', 'default'); // modules that require ssl
        $module     = $request->getModuleName();

        if (in_array($module, $sslModules)) { // require SSL
            if (APPLICATION_ENV == 'production') { // only require ssl in production mode
                if (!isset($_SERVER['HTTPS']) || !$_SERVER['HTTPS']) { // if request is not secure, redirect to secure url
                    $request    = $this->getRequest();

                    $url        = 'https://'
                                . $_SERVER['HTTP_HOST']
                                . $request->getRequestUri();

                    $redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector');
                    $redirector->gotoUrl($url);
                }
            }
        }
    }
}

要运行它,只需在引导程序中使用前端控制器进行注册:

Zend_Controller_Front::getInstance()->registerPlugin(new Application_Plugin_SslCheck());