Php 禁用特定ZF1模块的HTTPS
要求: 我有一个ZF1中的现有站点,运行HTTPS。以下是虚拟主机中的设置:Php 禁用特定ZF1模块的HTTPS,php,apache,http,zend-framework,https,Php,Apache,Http,Zend Framework,Https,要求: 我有一个ZF1中的现有站点,运行HTTPS。以下是虚拟主机中的设置: DocumentRoot /srv/sitename/public ... SSLEngine on SSLCertificateFile /etc/apache2/server.crt SSLCertificateKeyFile /etc/apache2/server.pem 现在的问题是,我们希望使用HTTP而不是HTTPS添加几个页面(整个模块)。例如,我们需要以下URL 现有的 https://www.s
DocumentRoot /srv/sitename/public
...
SSLEngine on
SSLCertificateFile /etc/apache2/server.crt
SSLCertificateKeyFile /etc/apache2/server.pem
现在的问题是,我们希望使用HTTP而不是HTTPS添加几个页面(整个模块)。例如,我们需要以下URL
现有的
https://www.sitename.com/module1/...
https://www.sitename.com/module2/...
https://www.sitename.com/module3/...
新要求
http://www.sitename.com/modulex/...
在ZF1中,由于我们只有一个入口点(public/index.php),我想知道这是否可能
在ZF1中,是否可以通过HTTPS运行一些模块,而通过HTTP运行一些其他模块?如果是,我们如何才能做到这一点?如果您想创建仅通过HTTP请求访问的
moduleX
,请尝试以下操作:
class ModuleX_Bootstrap extends Zend_Application_Module_Bootstrap
{
public function _initModule(){
$this->_redirect('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']);
}
}
如果要创建仅由HTTP请求访问的
moduleX
,请尝试以下操作:
class ModuleX_Bootstrap extends Zend_Application_Module_Bootstrap
{
public function _initModule(){
$this->_redirect('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']);
}
}
在我之前创建的Zend Framework应用程序中,我在配置时必须使用HTTPS,因此我按照以下方式操作:
// Force users on HTTPS if configured
if ( $config->httpsOnly && empty($_SERVER['HTTPS']) ) {
$httpsUrl = 'https://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
header("Location: $httpsUrl");
}
它工作得很好,我想在你的例子中,你可以在你的模块控制器的init
函数中使用它(或者如果你使用的是抽象,你可以在抽象控制器中使用它),我建议如下:
// Force users on HTTP, if using HTTPS
if ( !empty($_SERVER['HTTPS']) ) {
$httpUrl = 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
header("Location: $httpUrl");
}
我希望这对我以前创建的Zend Framework应用程序有所帮助,我在配置时必须使用HTTPS,所以我按照以下方式操作:
// Force users on HTTPS if configured
if ( $config->httpsOnly && empty($_SERVER['HTTPS']) ) {
$httpsUrl = 'https://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
header("Location: $httpsUrl");
}
它工作得很好,我想在你的例子中,你可以在你的模块控制器的init
函数中使用它(或者如果你使用的是抽象,你可以在抽象控制器中使用它),我建议如下:
// Force users on HTTP, if using HTTPS
if ( !empty($_SERVER['HTTPS']) ) {
$httpUrl = 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
header("Location: $httpUrl");
}
我希望这有帮助如果这是一个常见的apache问题,您可以使用一些重写规则来解决这个问题。
首先,让vhost配置使用相同的DocumentRoot为:443(https)和:80(http)提供服务 然后使用如下重写规则(在DocumentRoot的vhost conf或htaccess中): 基本上第一条规则说,如果试图在https上点击modulex,请重定向到http。
第二条规则是,如果试图在http上命中modulex以外的任何内容,请重定向到https。如果这是一个常见的apache问题,您可以使用一些重写规则来解决此问题。
首先,让vhost配置使用相同的DocumentRoot为:443(https)和:80(http)提供服务 然后使用如下重写规则(在DocumentRoot的vhost conf或htaccess中): 基本上第一条规则说,如果试图在https上点击modulex,请重定向到http。
第二条规则是,如果试图在http上点击modulex以外的任何东西,请重定向到https。目前为止没有答案。我想这意味着这是不可能的。但是有人能确认一下吗?到现在还没有答案。我想这意味着这是不可能的。不过,有人能确认一下吗?谢谢,阿布,我接受了这个答案,因为我们最终使用了这个解决方案,尽管有一些变化。我们将此解决方案中提到的代码放在插件中,并稍微更新了虚拟主机。这个解决方案非常有效。很抱歉,由于延迟接受,导致赏金转到另一个答案。但我们必须仔细研究这三个答案,才能找到最适合我们项目的答案。如果可能的话,我会对这个答案给予赏金。没关系,知道我的答案帮助你比任何S.O赏金都更有价值,谢谢你接受Hanks Abu,我接受了这个答案,因为我们最终使用了这个解决方案,尽管有一些改变。我们将此解决方案中提到的代码放在插件中,并稍微更新了虚拟主机。这个解决方案非常有效。很抱歉,由于延迟接受,导致赏金转到另一个答案。但我们必须仔细研究这三个答案,才能找到最适合我们项目的答案。如果可能的话,我会对这个答案给予赏金。没关系,知道我的答案对你的帮助比任何S.O赏金都重要,谢谢你接受