2009-08-25 17 views
23

Ho un'applicazione Zend Framework che voglio forzare in HTTPS usando mod_rewrite. Sono piuttosto perso quando si tratta di mod_rewrite. Ecco il mio attuale file .htaccess nella radice della mia applicazione.Forza SSL/HTTPS con mod_rewrite

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-s 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteRule !\.(html|htm|php|js|ico|gif|jpg|png|css|csv)$ /subdir/index.php 

Qual è il modo migliore per forzare l'applicazione in HTTPS in base a quello che ho? Ho provato un paio degli esempi che ho trovato qui, ma continuo a ricevere loop di reindirizzamento o errori interni del server quando li provo.

Grazie per il vostro aiuto!

+0

La domanda non ha nulla a che fare con Zend Framework. Molto fuorviare quando si cerca una soluzione di zend su google. Dovrebbe essere rinominato in "un'altra domanda mod_rewrite" – DanFromGermany

risposta

2

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^.*$ https://mydomain.com/\0 [L,QSA,R=301] 
36

mettere questa regola prima le regole attuali:

RewriteCond %{HTTPS} !=on 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
+0

Il punto da notare qui è "Metti questa regola prima delle regole attuali". Rendilo come la prima regola. Il mio sito aveva diverse regole di reindirizzamento e stava facendo questa regola, dato che la prima ha fatto il trucco. –

5

ero alla ricerca di questa soluzione pure. Ho aggiunto le soluzioni Gumbo e ha funzionato benissimo per me. Ma il mio originale era diverso. La mia riscrittura sito/app reindirizza tutto tramite index.php (per fany urls e ../application) ad eccezione dei file richiesti in modo specifico. (come un'immagine o altri file statici nella radice pubblica) Ecco il mio originale, che ho trovato fuori dal sito ZF molto tempo fa.

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ index.php [NC,L] 

Ecco le regole aggiuntive di Gumbo per forzare SSL sull'intero sito. Finora funziona bene per me.

RewriteEngine On 
RewriteCond %{HTTPS} !=on 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ index.php [NC,L] 
24

Mentre la soluzione di Gumbo funziona bene per il proprio server web Apache medio, ho sperimentato reindirizzare loop sul server dietro proxy (ad esempio siti CloudFlare'd o OpenShift). La seguente soluzione funziona bene per i server proxy e non proxy:

RewriteEngine On 

# If we receive a forwarded http request from a proxy... 
RewriteCond %{HTTP:X-Forwarded-Proto} =http [OR] 

# ...or just a plain old http request directly from the client 
RewriteCond %{HTTP:X-Forwarded-Proto} ="" 
RewriteCond %{HTTPS} !=on 

# Redirect to https version 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

# Put the rest of your rewrite rules here 
+4

Definire +1 per questa risposta quando si utilizza SSL flessibile Cloudflare; tutte le altre soluzioni sembrano creare loop di reindirizzamento – BellamyStudio

+0

Lavorato su un sito wordpress in cui solo la home page stava forzando https mentre per altre pagine http era consentito. Nota: ho dovuto inserire questo codice PRIMA del '#BEGIN WordPress' in .htaccess per farlo funzionare. – nikhilvj

+1

Usato per Heroku. Freddo! –