要求: 我在ZF1中有一个现有站点,运行在HTTPS上。以下是在虚拟主机中设置:
DocumentRoot /srv/sitename/public
...
SSLEngine on
SSLCertificateFile /etc/apache2/server.crt
SSLCertificateKeyFile /etc/apache2/server.pem
现在问题是,我们希望使用HTTP而不是HTTPS添加几个页面(整个模块)。例如,我们需要关注URLS
现有
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运行其他一些模块?如果是,我们该怎么做?
答案 0 :(得分:2)
如果您希望仅通过HTTP请求访问create moduleX
,请尝试以下操作:
class ModuleX_Bootstrap extends Zend_Application_Module_Bootstrap
{
public function _initModule(){
$this->_redirect('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']);
}
}
答案 1 :(得分:2)
在我之前创建的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");
}
我希望这有助于
答案 2 :(得分:0)
如果这是一个常规的apache问题,你可以用一些重写规则解决这个问题 首先使您的vhost配置同时服务于:443(https)和:80(http)具有相同的DocumentRoot。
然后使用像这样的RewriteRule(在vhost conf中或在DocumentRoot的htaccess中):
RewriteEngine on
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} ^/modulex
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^/modulex
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
基本上,第一条规则说如果尝试在https上点击modulex,则重定向到http。 第二条规则说,如果尝试在http下击中modulex以外的任何内容,请重定向到https。