/ / Примусовий SSL в .htaccess або в моєму PHP-коді призводить до помилки циклу перенаправлення - php, apache, zend-Framework, mod-rewrite

Примусити SSL в .htaccess або в моєму PHP-код, призводить до помилки циклу переспрямування - php, apache, zend-framework, mod-rewrite

Я намагаюся змусити використовувати HTTPS, ясподіваємося досягти цього за допомогою файлу .htaccess, але також спробували використати код. Я використовую Zend Framework і спробував використовувати цей код у Bootstrap.php намагаючись уникнути суперечливого правила або помилкового налаштування на 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();
}
}
}

Це дає ті самі результати, як якщо б я куди це зробити ...

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

у моєму файлі .htaccess. Я отримую таку ж скаргу на цикл переадресації на моєму місцевому розробнику. сервер (де я маю повний доступ до всіх налаштувань, звичайний "ol LAMP стек це"). Також ті ж результати на Zend "s PHPCloud (використовуючи сервер Zend).

Ось мій повний .htacces файл, я намагався використовувати правила в різних місцях ...

    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...

Я просто не можу зрозуміти, що я роблю неправильно, я також спробував кілька інших «популярних» методів для переписування.

Моя єдина вимога - щоб вся програма НЕ була доступна через незахищене з'єднання (лише для SSL).

Відповіді:

3 для відповіді № 1

Якщо у вас є доступ до файлу vhost, ви можете зробити це:

<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>