我需要将https放在某些网址上,而不是放在所有网址上。我正在为所有链接使用zend URl视图助手。我有一个* .example.com整个站点的SSL证书。现在我用https://www.example.co打开网站,然后主页或其他网页上的所有链接都包含URL中的https。如何在https网址上做出一些具体请求,其他页面应该正常打开。
我还需要进行一些重定向,这样如果有人打开普通网址中的特定网页,那么他们会重定向到https网址。我认为.htaccess重定向将适用于此。
任何帮助????
提前致谢!!!
答案 0 :(得分:2)
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-&gt; httpsUrl(array('some'=&gt;'params')/ ,$ route,$ reset /);
要确保定义的reqeust必须是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-&gt; registerPlugin(new My_Controller_Plugin_HttpBlacklist);
答案 1 :(得分:1)
我宁愿使用简单的方法,也不需要对网址生成/路由进行任何更改。我在插件的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);
}
}
}
}