Cum redirecționați HTTPS către HTTP?

Cum redirecționați HTTPS către HTTP ?. Asta este, opusul a ceea ce (în aparență) toată lumea învață.

Am un server pe HTTPS pentru care am plătit o certificare SSL și o oglindă pentru care nu am și păstrez în jur doar pentru situații de urgență, astfel încât nu merită obținerea unei certificări.

Pe desktop-urile clientului meu am câteva comenzi rapide care indică http://production_server și https://production_server (ambele funcționează). Cu toate acestea, știu că, dacă serverul meu de producție coboară, atunci redirecționarea DNS este lansată, iar acei clienți care au "https" pe comanda rapidă vor fi uitați la https://mirror_server (care nu funcționează ) și un ecran de mare grasime Internet Explorer 7 ecran roșu de neliniște pentru compania mea.

Din păcate, nu pot schimba acest lucru la nivel de client. Acești utilizatori sunt foarte analfabeți pe computer și sunt foarte susceptibili să se ferească să vadă erorile de "insecuritate" ale HTTPS (mai ales modul în care Firefox 3 și Internet Explorer 7 o rezolvă astăzi: FULL STOP, un fel de mulțumire, dar nu mă ajută aici LOL).

It's very easy to find Apache solutions for http->https redirection, but for the life of me I can't do the opposite.

Idei?

0
fr hi bn

9 răspunsuri

Rețineți că motorul Rewrite apare numai după primirea solicitării HTTP - ceea ce înseamnă că veți avea nevoie în continuare de un certificat, pentru ca clientul să stabilească conexiunea pentru a trimite solicitarea peste!

Cu toate acestea, dacă aparatul de rezervă va avea același nume de gazdă (în ceea ce privește clientul), atunci nu ar trebui să existe nici un motiv să nu puteți utiliza același certificat ca și mașina principală de producție.

0
adăugat
Cum poate fi depășită această limitare? Am aceeași problemă. obținerea erorii de certificare din browser înainte de redirecționare.
adăugat autor Sandeep Balagopal, sursa

Nici unul dintre răspunsuri nu funcționează pentru mine pe site-ul Wordpress, ci după lucrări (este similar cu alte răspunsuri, dar au o mică schimbare)

RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
0
adăugat

Acest lucru nu a fost testat, dar cred că acest lucru ar trebui să funcționeze folosind mod_rewrite

RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}
0
adăugat
Deși funcționează, apare greșit pe Apache ( httpd.apache.org/docs/ curent/rescrie/evita.html ) Se pare că ar trebui să folosești mod alias în schimb.
adăugat autor Jackie, sursa
Dacă am pus această soluție sugerată în .htaccess plasată în folderul specific de sub www din apache & set AllowOverride All în default_site.conf ar funcționa?
adăugat autor Ciasto piekarz, sursa
Cum reușesc să funcționez (ce trebuie să schimb de la acest cod la domeniul meu pentru a face acest cod să funcționeze)?
adăugat autor Enve, sursa
Ar fi posibil să facem acest lucru evitând o rescriere, pe recomandarea lui Apache la httpd.apache .org/docs/current/rescrie/evita.html ?
adăugat autor Gaia, sursa
Cred că ați putea dori, de asemenea, să prindeți șiruri de interogare. Nu sunt sigur, dar cred că fragmentul de mai sus nu va trimite șirul de interogări de la https la http.
adăugat autor Rustavore, sursa
@Gaia Iată versiunea Redirect pe recomandarea lui Apache Redirect "/" "http://domain_to_redirect_to.com/"
adăugat autor Poly Bug, sursa
Am nevoie de ea, dar combinat doar cu "dev". gazdă pentru toate domeniile mele. Cu alte cuvinte, pentru https: //www.* voi păstra SSL și pentru https: //dev.* trebuie să merg http://dev. * pentru că nu am certificat SSL și este mai bine să testez fără avertismente. Cum să?
adăugat autor Meloman, sursa
Enve: adăugați doar la configurația vhost_ssl.conf a site-ului (sau .htaccess la radacina site-ului). Nimic nu trebuie schimbat, va folosi în mod dinamic același nume de gazdă și aceeași cale de url.
adăugat autor Darren Felton, sursa
După cum a subliniat Kieron de mai jos, acest lucru nu ar funcționa dacă serverul oglindă nu are un certificat valid. Încă veți vedea o avertizare roșie mare din cauza certificatului nevalid. Odată ce începeți să utilizați https, sunteți practic blocat cu acesta. Fiți pregătit să plătiți pentru tot restul vieții. Dacă nu mai plătiți, persoanele care au marcat linkurile https nu vor putea să vină prin intermediul acestora.
adăugat autor Stephen Cheng, sursa

Dacă niciuna dintre soluțiile de mai sus nu funcționează pentru dvs. (nu au făcut-o pentru mine), aici este ceea ce a funcționat pe serverul meu:

RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [L,R=301]
0
adăugat
De multe ori, nu veți dori L, (ceea ce înseamnă "ultima regulă"). Dacă utilizați wordpress sau un alt CMS, pavilionul L poate împiedica ca cererea paginii să fie rutată corect. În schimb, folosiți: RewriteRule ^ (. *) $ Http: //% {HTTP_HOST}/$ 1 [R = 301]
adăugat autor Rustavore, sursa

Pe baza răspunsului lui Ejunker, aceasta este soluția care funcționează pentru mine, nu pe un singur server, ci într-un mediu cloud

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{ENV:HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
0
adăugat

Pentru cei care folosesc un fișier .conf .


    ServerName domain.com
    RewriteEngine On
    RewriteCond %{HTTPS} on
    RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}

    SSLEngine on
    SSLCertificateFile /etc/apache2/ssl/domain.crt
    SSLCertificateKeyFile /etc/apache2/ssl/domain.key
    SSLCACertificateFile /etc/apache2/ssl/domain.crt


0
adăugat

În măsura în care știu că o simplă meta refresh funcționează și fără a provoca erori:

<meta http-equiv="refresh" content="0;URL='http://www.yourdomain.com/path'">
0
adăugat
Îmi doresc ca alegătorii să fie obligați să lase comentarii care explică motivele voturilor în jos. Personal, nu aș alege acest răspuns dacă nu sunteți dezvoltator, nu aveați acces la serverul pe care îl dezvoltați, dar ați avut acces la pagină. O problemă este că va trebui să codificați fiecare cale pe fiecare pagină pentru ca aceasta să funcționeze. Dacă vă puteți presupune că JavaScript este activat pentru cazurile importante de utilizare, ar fi mai bine să utilizați JavaScript pentru a trece la http. Răspunsurile de mai sus sunt mai bune, deoarece nu necesită javascript, deoarece acestea s
adăugat autor Rustavore, sursa
Pur și simplu: deoarece htaccess este o opțiune mult mai bună decât asta. De asemenea, nu rezolvă problema pentru a redirecționa protocolul https la http dacă nu aveți un certificat.
adăugat autor miduga, sursa
Acțiunea trebuie procesată de server, nu un document "a" pe care îl poate servi.
adăugat autor albal, sursa

Este mai bine să ovoid folosind mod_rewrite când poți. În cazul tău aș înlocui rescrierea cu aceasta:

    
            Redirect permanent/http://production_server/
    

The directive is only available in Apache 2.4+ as per this blog here

0
adăugat

toate cele de mai sus nu au funcționat atunci când am folosit cloudflare, aceasta a lucrat pentru mine:

RewriteCond %{HTTP:X-Forwarded-Proto} =https
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

și acest lucru funcționează cu siguranță fără proxy în felul:

RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
0
adăugat