Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 禁用特定ZF1模块的HTTPS_Php_Apache_Http_Zend Framework_Https - Fatal编程技术网

Php 禁用特定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

要求: 我有一个ZF1中的现有站点,运行HTTPS。以下是虚拟主机中的设置:

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赏金都重要,谢谢你接受