/ / Wymuś SSL w .htaccess lub w moim kodzie PHP, powoduje błąd pętli przekierowania - php, apache, zend-framework, mod-rewrite

Wymuszanie SSL w pliku .htaccess lub w moim kodzie PHP, powoduje błąd przekierowania pętli - php, apache, zend-framework, mod-rewrite

Próbuję wymusić użycie HTTPSmam nadzieję, że uda się to osiągnąć za pomocą pliku .htaccess, ale próbowałem również użyć kodu. Korzystam ze środowiska Zend i próbowałem użyć tego kodu w Bootstrap.php próbując uniknąć sprzecznej reguły lub błędnych ustawień na serwerze 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();
}
}
}

Daje to takie same wyniki, jak gdybym to zrobił ...

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

w moim pliku .htaccess. Otrzymuję tę samą skargę dotyczącą pętli przekierowań na mojego lokalnego programistę. serwer (gdzie mam pełny dostęp do wszystkich ustawień, jest to zwykły stos LAMP). Te same wyniki na PHPCloud Zend (używając serwera Zend).

Oto mój pełny plik .htacces, próbowałem używać reguł w różnych miejscach ...

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

Po prostu nie mogę zrozumieć, co robię źle, próbowałem też kilku innych „popularnych” metod przepisywania. Ponadto, przy okazji używam mojej rzeczywistej nazwy domeny w RewriteRule.

Moim jedynym wymaganiem jest, aby cała aplikacja NIE była dostępna za pośrednictwem niezabezpieczonego połączenia (tylko SSL).

Odpowiedzi:

3 dla odpowiedzi № 1

Jeśli masz dostęp do pliku vhost, można to zrobić:

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