如何从ZF2中的HTTPS页面重定向到HTTP页面?

时间:2014-09-20 04:07:05

标签: php https zend-framework2

我已经在页面数量上应用了https重定向,但每当我通过ZF2重定向进入另一条路线时,下一页将打开https。我想仅在选定的页面上应用https。请建议.. ??

1 个答案:

答案 0 :(得分:0)

经过大量搜索后我找到了解决方案。只需按照以下步骤更新应用程序的Module.php:

public function onBootstrap(MvcEvent $e)
{
    $eventManager = $e->getApplication()->getEventManager();

    $moduleRouteListener = new ModuleRouteListener();
    $moduleRouteListener->attach($eventManager);


    $eventManager->attach('route', array($this, 'doHttpsRedirect'));

    // your code
}

并添加函数doHttpsRedirect,如:

    public function doHttpsRedirect(MvcEvent $e)
    {
        $sm = $e->getApplication()->getServiceManager();
        $uri = $e->getRequest()->getUri();
        $controller = $e->getRouteMatch()->getParam('controller');
        $action =  $e->getRouteMatch()->getParam('action');
        $securedPages = array('Application\Controller\Login', 'Application\Controller\Register', 'Application\Controller\shopping');

        if (in_array($controller, $securedPages)) {
            $scheme = $uri->getScheme();
            if ($scheme != 'https') {
                $uri->setScheme('https');
                $response = $e->getResponse();
                $response->getHeaders()->addHeaderLine('Location', $uri);
                $response->setStatusCode(302);
                $response->sendHeaders();
                return $response;
            }
        } else if (!in_array($controller, $securedPages)) {
            if ($_SERVER["HTTPS"] == "on") {
                $uri->setScheme('http');
                $response = $e->getResponse();
                $response->getHeaders()->addHeaderLine('Location', $uri);
                $response->setStatusCode(302);
                $response->sendHeaders();
                return $response;
            }
        }
    }

这就是全部...... !!

相关问题