Запрос https на некоторых страницах, но не на всех страницах Zend Framework - PullRequest
3 голосов
/ 23 сентября 2010

Мне нужно добавить https на некоторые URL-адреса, но не на все URL-адреса. Я использую Zend URl View Helper для всех ссылок. У меня есть * .example.com SSL-сертификат для всего сайта. Теперь я открываю сайт с https://www.example.co,, тогда вся ссылка на домашней странице или других страницах содержит https в URL. Как я могу сделать какой-то конкретный запрос на URL-адрес https и другие страницы должны открываться в обычном режиме.

Мне также нужно указать некоторое перенаправление, чтобы, если кто-то открывал определенные страницы в обычном URL-адресе, он перенаправлялся по адресу https. Я думаю, что перенаправление .htaccess будет работать для этого.

Любая помощь ????

Заранее спасибо !!!

Ответы [ 2 ]

2 голосов
/ 25 сентября 2010

URL ViewHelper только собирает пути, абсолютные от имени хоста. так что вам нужно явно префикс ваших ссылок https

<? $url = $view->url(array('some' => 'params') /*, $route, $reset*/) ?>
<a href="https://<?= $_SERVER['HTTP_HOST] ?><?= $url ?>">my explicit https link</a>

вам, возможно, следует создать собственный небольшой помощник по видам, который будет работать для вас, а также проверить, установлен ли HTTP_HOST и т. Д., Возможно, также взять его из конфигурации вместо $ _SERVER.

$ view-> httpsUrl (массив ('some' => 'params') / , $ route, $ reset /);

Чтобы быть уверенным, что заданный запрос должен быть https, можно легко сделать, добавив плагин фронт-контроллера или даже абстрактный класс контроллера, на котором вы базируете весь свой otehr контроллер.

плагин может выглядеть следующим образом

My_Controller_Plugin_HttpBlacklist extends Zend_Controller_Plugin_Abstract
{
    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
        // when /foo/bar/baz is requested
        if (($request->getModuleName() == 'foo' &&
            $request->getControllerName() == 'bar' &&
            $request->getControllerName() == 'baz')
            /* || (conditions for more requests)*/) {

            //very basic confifiotn to see if https is enabled, should be done better...
            if (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != 'on') {

                // should be done with Zend_Http_Reponse instead
                header('Location: https://'. $_SERVER['HTTP_HOST] . $_SERVER['REQUEST_URI']);
                exit;
            }
        }
    }
}

затем просто подключите его

$ frontController-> registerPlugin (new My_Controller_Plugin_HttpBlacklist);

1 голос
/ 01 октября 2010

Я скорее использовал простой метод, который не требует каких-либо изменений в генерации / маршрутизации URL. Я написал следующие строки в функции routeStartup плагина и не внес никаких изменений в маршрут URL.

public function routeStartup(Zend_Controller_Request_Abstract $request)
{

   $controller=$this->_controller = $this->_front->getRequest()->getControllerName();
   $action=$this->_controller = $this->_front->getRequest()->getActionName();

    if($_SERVER['SERVER_PORT']!=443)
    {
//controller and actions array to check ssl links
        $actionArr=array('index'=>array('registration'),'account'=>array('editacc','edit'),'dealer'=>array('*'));
        if(array_key_exists($controller,$actionArr)!==false)
        {
            if(in_array($action,$actionArr[$controller]) || $actionArr[$controller][0]=='*')
            {
                $redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector');
                 $redirector->gotoUrl(SITE_LIVE_URL_SSL.$controller."/".$action);    
            }
        }


    }
    else
    {
//controller and action array that should not be on ssl.
          $notAactionArr=array('usersearch'=>array('mainserarch'),'account'=>array('index'),'onlineusers'=>array('*'));
        if(array_key_exists($controller,$notAactionArr)!==false)
        {
            if(in_array($action,$notAactionArr[$controller]) || $notAactionArr[$controller][0]=='*')
            {
                $redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector');
                 $redirector->gotoUrl(SITE_LIVE_URL.$controller."/".$action);    
            }
        }

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...