/ / Force SSL no .htaccess ou no meu código PHP, resulta em erro de loop de redirecionamento - php, apache, zend-framework, mod-rewrite

Forçar SSL em .htaccess ou no meu código PHP, resulta em erro de loop de redirecionamento - php, apache, zend-framework, mod-rewrite

Estou tentando forçar o uso de HTTPS, estouesperançosos em fazer isso com o arquivo .htaccess, mas também tentaram usar o código. Estou usando a estrutura do Zend e tentei usar esse código no diretório Bootstrap.php na tentativa de evitar uma regra conflitante ou alguma configuração incorreta no servidor HTTP.

public function _initForceSSL() {
if (!isset($_SERVER["HTTPS"]) || $_SERVER["HTTPS"] !== "on") {
if(!headers_sent()) {
header("Status: 301 Moved Permanently");
header(sprintf(
"Location: https://%s%s",
$_SERVER["HTTP_HOST"],
$_SERVER["REQUEST_URI"]
));
exit();
}
}
}

Isso produz os mesmos resultados como se eu fosse fazer isso ...

RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://mydomain.tld/$1 [R,L]

no meu arquivo .htaccess. Recebo a mesma reclamação de loop de redirecionamento no meu desenvolvedor local. servidor (onde eu tenho acesso completo a todas as configurações, a pilha LAMP normal é). Além disso, os mesmos resultados no PHPCloud do Zend (usando o servidor Zend).

Aqui está o meu arquivo .htacces completo, tentei usar as regras em vários lugares ...

    setEnv APPLICATION_ENV development

#setEnv APPLICATION_ENV production
#setEnv APPLICATION_ENV testing

RewriteEngine On

#tried it here

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
#tried here
RewriteBase /
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

#tried it here too...

Eu simplesmente não consigo entender o que estou fazendo de errado, tentei também alguns outros métodos "populares" para reescrever. Além disso, também uso meu nome de domínio real no RewriteRule.

Meu único requisito é que o aplicativo inteiro NÃO esteja disponível em uma conexão não segura (somente SSL).

Respostas:

3 para resposta № 1

Se você tiver acesso ao arquivo vhost, poderá fazer o seguinte:

<VirtualHost *:80>
ServerName  example.com

RewriteEngine on
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^(.*)$ https://%{SERVER_NAME}$1 [L,R]
</VirtualHost>

<VirtualHost *:443>
ServerName  example.com
...
</VirtualHost>