Tüm HTTP istekleri HTTPS'ye nasıl yeniden yönlendirilir


294

Sitemdeki tüm güvensiz HTTP isteklerini http://www.example.comHTTPS'ye ( https://www.example.com) yönlendirmeye çalışıyorum . PHP btw kullanıyorum. Bunu .htaccess içinde yapabilir miyim?


1
Bunu httpdPHP ile yapamazsınız (ve yapmalısınız) .
köle

2
@jnpcl, httpd çözümünün PHP tabanlı çözümden daha iyi olduğunu kabul ederken, sistematik bir yönlendirmenin genel olarak iyi bir uygulama olduğunu düşünmüyorum. Kullanıcılarınızı her zaman HTTPS'ye yönlendirmek istiyorsanız, onları "giriş noktasından" (sitenize ilk bağlantı) gönderin, yarıya kadar yapmayın, bu da düşündüğünüz bazı verileri sızdırabilir korunuyor (bu anlık yönlendirmeyi fark etmezseniz).
Bruno

@Bruno: Ben Çoğaltılmış http istekleri, kayıp sorgu dizeleri potansiyeli çizgisinde düşünüyordum ve kullanıcı olasılığı elle yazarakhttp://
drudge

@jnpcl bu gerçekten iyi bir nokta. Yalnızca, sitelerinin güvenliğini artırmak için bu tür bir yönlendirme isteme eğilimindeyken, genellikle bunu geliştirmediğini (aynı isteğin önce düz HTTP'den geçmesini engellemediğinden) .
Bruno

8
@outis: İlk gönderdiğin bağlantı bu soru.
Mei

Yanıtlar:


305

Güncelleme: Bu yanıt birkaç yıl önce kabul edilmiş olsa da, yaklaşımının artık Apache belgeleri tarafından önerildiğini unutmayın . RedirectBunun yerine bir kullanın. Bu cevaba bakınız .


RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

24
@Cat, cevabım / yorumlarımda söylediğim gibi, "tüm güvensiz HTTP [...] 'yi HTTPS'ye yönlendirmeye çalışıyorsanız", bu yaklaşım bu istekleri güvenli hale getirmez, sadece tarayıcının onları yapmasını sağlar iki kez, bir kez güvensiz ve bir kez güvenli.
Bruno

13
Gerçekten yapman gereken HSTS'yi bununla birlikte kullanmak .
Reese Moore

3
Bu, apache sürümümde bir hata olabilir (Centos 7'de paketlendiği gibi 2.4.6), ancak bunun belirli URL'lerde benim için sorunları var. Örneğin , "@" işaretine http://server/foo?email=someone%40example.comyönlendirmeler https://server/foo?email=someone%2540example.comURL'den iki kez alıntılanır . @ Ssc'nin cevabındaki yöntemi kullanmanın bu sorunu yoktur.
psmears

2
Yanlış cevap. Alt klasörlerde URL'leri değil, yalnızca temel URL'yi yönlendirir. RewriteRule (. *) Https: //% {HTTP_HOST}% {REQUEST_URI} [R = 301, L] doğru cevaptır
FredTheWebGuy

7
Mutlaka buna karşı tavsiye etmiyorlar:In the case of the http-to-https redirection, the use of RewriteRule would be appropriate if you don't have access to the main server configuration file, and are obliged to perform this task in a .htaccess file instead.
Adam

338

Apaçi dokümanlar yeniden yazmak kullanılmasına karşı tavsiye:

httpURL'leri şuraya yönlendirmek httpsiçin aşağıdakileri yapın:

<VirtualHost *:80>
    ServerName www.example.com
    Redirect / https://www.example.com/
</VirtualHost>

<VirtualHost *:443>
    ServerName www.example.com
    # ... SSL configuration goes here
</VirtualHost>

Bu parçacık, ana sunucu yapılandırma dosyası içine gitmeli değil içine .htaccesssöz konusu sorulduğunda olarak.

Bu makale ancak soru sorulduktan ve cevaplandıktan sonra ortaya çıkmış olabilir, ancak şu anki geçerli yol gibi görünüyor.


11
Bu şimdiki cevap olmalı. Peki "SSL yapılandırması" nda tam olarak ne var? Tam bir örnek gerçekten yararlı olacaktır.
Ben

6
@Ben: Bu, çevrimiçi olarak kapsamlı bir şekilde belgelenen farklı bir soru; bu arada, dün neredeyse tam bir örnek ekledim: serverfault.com/q/597012/26210 SSL yapılandırmasında neler olduğuna dair bir fikir verebilir
ssc

46
Bu harika bir ipucu. Ancak Apache belgesinde ayrıca: "http-https yeniden yönlendirmesi durumunda, ana sunucu yapılandırma dosyasına erişiminiz yoksa ve bu görevi şu şekilde gerçekleştirmek zorundaysanız RewriteRule kullanımı uygun olur. bunun yerine .htaccess dosyası. " Benim için durum böyle ...
peter_the_oak

4
@ user1844933 permanentAnahtar kelimeyi kullanırsanız, etki aynıdır (tarayıcı 301 yönlendirmesi alır). Örnek:Redirect permanent "/" "https://example.com"
BeetleJuice

2
@Whitecat Centos 6'da dosya /etc/httpd/conf/httpd.conf
dstonek

141

301 yönlendirmesi ile tavsiye ederim:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

7
teşekkürler, bu benim için çalışıyor, kabul edilen cevap değil .. muhtemelen eksikliği nedeniyle[L]
billynoah

1
Evet. Bu doğru yanıttır, çünkü alt klasörlerdeki tüm URL'leri de yönlendirir
FredTheWebGuy

Bu htaccess dosyasının en üst seviyesinde mi?
CodyBugstein

1
@CodyBugstein Her zaman yerleştirdiğim yer ve her zaman çalışıyor.
Daan van den Bergh

3
Tüm yanıtlar bir şeyden yoksundur - tüm sayfaların https'ye yönlendirilmesini istiyorsanız, yeniden yönlendirme kodunun .htaccess dosyanızın başına, başka bir şeyden ÖNCE yerleştirilmesi gerekir.
Vadim Anisimov

35

Bu soruda söylediğim gibi , tüm HTTP isteklerini HTTPS eşdeğerlerine körü körüne yönlendirmekten kaçınmanızı öneririm, çünkü bu size yanlış bir güvenlik izlenimi verebilir. Bunun yerine, muhtemelen HTTP sitenizin "kökünü" HTTPS sitenizin kök dizinine yönlendirmeli ve oradan bağlantıyı yalnızca HTTPS'ye yönlendirmelisiniz.

Sorun, HTTPS sitesindeki bazı bağlantı veya formların istemcinin HTTP sitesine istek göndermesini sağlaması durumunda, içeriğinin yeniden yönlendirmeden önce görünür olmasıdır.

Örneğin, HTTPS üzerinden sunulan sayfalarınızdan birinde <form action="http://example.com/doSomething">açık bir şekilde gönderilmemesi gereken bazı verileri söyleyen ve gönderen bir form varsa , tarayıcı önce tüm isteği (POST ise varlık dahil) HTTP sitesine gönderir ilk. Yeniden yönlendirme hemen tarayıcıya gönderilir ve çok sayıda kullanıcı uyarıları devre dışı bıraktığı veya yok saydığı için yoksayılması muhtemeldir.

Tabii ki, HTTPS sitesine olması gereken ancak HTTP sitesi için olan bağlantıları sağlama hatası, HTTPS sitenizle aynı IP adresindeki HTTP bağlantı noktasını dinleyen bir şey alır almaz sorunlara neden olabilir. Ancak, iki sitenin bir "ayna" olarak tutulması sadece hata yapma olasılığını arttırdığını düşünüyorum, çünkü kullanıcıyı HTTPS'ye yönlendirerek kendini otomatik olarak düzeltirken, genellikle çok geç. ( Bu soruda benzer tartışmalar vardı . )


1
Tüm siteyi HTTPS olarak sunmaya karar verirken, bu tür bir yönlendirme mantıklıdır. Bir kullanıcının 403 almasını istemiyorum çünkü açılış sayfası için http belirtmişler. Birisi bir bağlantıda http belirtiyor ve kötü olan üretime dağıtırsa kabul ediyorum. Test sırasında, yönlendirme yerinde olsa bile yakalanmalıdır. Ben "olabilir" argümanını sevmiyorum çünkü bu "olabilir" yerinde yönlendirme olmadan gerçekleşebilir. Güvenli bir tarayıcıda test ederken belirtiler aynıdır, ancak 403 almak yerine yeniden yönlendirdiğini onayladıktan sonra
Derek Litz

Evet, birisi yanlışlıkla http'yi bir form eylemine sokarsa, ancak girilen URL'lere karşı yumuşak davranmak çoğu durumda daha önemli görünüyorsa, başarısız olmanın faydasını görüyorum.
Daniel Lubarov

4
@Daniel, kullanıcılar URL'yi yazdığında yumuşak olmanın yararlı olduğunu kabul ediyorum. Geliştirme / test sırasında bu özelliğe sahip olmanın daha iyi olduğu durumlardan biri olduğunu söyleyebilirim, ancak üretimi (veya geliştirme / testin son aşamalarında) açın.
Bruno

neden http dns at https.
Muhammed Umer

1
@MuhammadUmer, çünkü bunun DNS ile ilgisi yok. Genel olarak aynı ana bilgisayar adını kullanıyorlardı, ancak farklı bir ana bilgisayar adıyla bile, yine de protokolü ve bağlantı noktasını değiştirmeniz gerekir.
Bruno

18

Etki alanındaki https ve www için en iyi yolun

RewriteCond %{HTTPS} off 
RewriteCond %{HTTPS_HOST} !^www.example.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]

Bu http://www.example.com/...iki yönlendirme dolaylı olarak VE yöneldiğinden yönlendirme yapmayacaktır. Bunun yerine OR'lu olmalılar, yani. ORilk koşuldaki bayrağı ekleyin (ve normal ifadedeki değişmez noktalardan kaçmayı unutmayın). Eğer uyguladıklarını Ama eğer HSTS o zaman HTTPS ve tek yönlendirme www yönlendirme yapmak istemiyorum, HTTPS yönlendirmelidir ilk .
MrWhite

Bu metni nereye koyacağım?
Aaron Franke

Benzer türden bir soru üzerine. Aşağıdaki soru ile herkes yardımcı olabilir mi? stackoverflow.com/questions/59503217/…
appsntech

14

Bu, işe yarayan html yönlendirme yaklaşımıdır, ancak en iyisi değildir.

 <meta http-equiv="Refresh" content="0;URL=https://www.example.com" />

PHP yaklaşımı

<?php
function redirectTohttps() {
    if ($_SERVER['HTTPS']!="on") {
        $redirect= "https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
        header("Location:$redirect"); 
    } 
}
?>

.htaccess yaklaşımı

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

kopyalandığı yer: www.letuslook.org


Nereye .htaccessgidiyor? Ayrıca, bu bağlantı öldü.
Aaron Franke

8

Ben http https yönlendirmek için bu yöntemi seviyorum. Çünkü her site için düzenlememe gerek yok.

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

Bu metni nereye koyacağım?
Aaron Franke

6

.Htaccess dosyanızda aşağıdaki kodu kullanmak, ziyaretçileri otomatik olarak sitenizin HTTPS sürümüne yönlendirir:

RewriteEngine On

RewriteCond %{HTTPS} off

RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Mevcut bir .htaccess dosyanız varsa:

RewriteEngine On'u kopyalamayın.

RewriteCond ve RewriteRule ile başlayan satırların hemen mevcut RewriteEngine Açık'ı izlediğinden emin olun.


L ve R ne anlama geliyor?
Aaron Franke

5

Bu, GoDaddy.com'a göre .htaccess kullanarak HTTP'yi HTTPS'ye yönlendirmenin uygun yöntemidir. İlk kod satırı açıklayıcıdır. İkinci kod satırı, HTTPS'nin kapalı olup olmadığını kontrol eder ve eğer öyleyse, üçüncü kod satırını çalıştırarak HTTP'yi HTTPS'e yönlendirir, aksi takdirde üçüncü kod satırı yok sayılır.

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

https://www.godaddy.com/help/redirect-http-to-https-automatically-8828


5

En iyi çözüm gereksinimlerinize bağlıdır. Bu, bazı bağlamlar eklenmiş olarak daha önce gönderilen cevapların bir özetidir.

Apache web sunucusuyla çalışıyorsanız ve yapılandırmasını değiştirebiliyorsanız, Apache belgelerini izleyin :

<VirtualHost *:80>
    ServerName www.example.com
    Redirect "/" "https://www.example.com/"
</VirtualHost>

<VirtualHost *:443>
    ServerName www.example.com
    # ... SSL configuration goes here
</VirtualHost>

Ancak bunu bir .htaccessdosyada yapıp yapamayacağınızı da sordunuz . Bu durumda Apache'nin RewriteEngine'ini kullanabilirsiniz :

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L]

Her şey yolunda giderse ve tarayıcıların bu yönlendirmeyi hatırlamasını istiyorsanız, son satırı şu şekilde değiştirerek kalıcı olarak bildirebilirsiniz:

RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Ancak bu yönlendirme konusunda fikrinizi değiştirebiliyorsanız dikkatli olun. Tarayıcılar bunu çok uzun bir süre hatırlar ve değişip değişmediğini kontrol etmez.

Web RewriteEngine Onsunucusu yapılandırmasına bağlı olarak ilk satıra ihtiyacınız olmayabilir .

Bir PHP çözümü arıyorsanız, $ _SERVER dizisine ve header işlevine bakın :

if (!$_SERVER['HTTPS']) {
    header("Location: https://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); 
} 

Apache belgelerinin Yeniden Yazma yoluna karşı önerdiği anlaşılıyor. Yönlendirme ne olacak? Bir .htaccessdosyaya başka neler gidebilir ?
Aaron Franke

Evet, Yönlendirme tercih edilir ve .htaccess içinde kullanılabilir. Ancak, http trafiğini https'ye yönlendirmek için koşul ekleyemezsiniz. Https'yi de yönlendirir -> sonsuz yönlendirme döngüsü. Yukarıdaki http (bağlantı noktası 80) için kullanılan VirtualHost yönergesinde listeledim, .htaccess bu yönergeyi desteklemiyor ve bu nedenle Yönlendirme burada kullanılamıyor.
maikel

4

Aşağıdaki kodu .htaccess dosyasına ekleyin:

Options +SymLinksIfOwnerMatch
RewriteEngine On
RewriteCond %{SERVER_PORT} !=443
RewriteRule ^ https://[your domain name]%{REQUEST_URI} [R,L]

Burada [alan adınız] web sitenizin alan adıdır.

Yukarıdaki kodun son satırını aşağıdaki ile değiştirerek belirli klasörleri alan adınızın dışına da yönlendirebilirsiniz:

RewriteRule ^ https://[your domain name]/[directory name]%{REQUEST_URI} [R,L]

L ve R ne anlama geliyor?
Aaron Franke

4

Yönlendirme için yukarıda açıklanan her şeyi yapın. Başlığınıza "HTTP Sıkı Aktarım Güvenliği" ekleyin. Bu, orta saldırıdaki adamı önleyecektir.

Apache yapılandırma dosyanızı düzenleyin (örneğin /etc/apache2/sites-enabled/website.conf ve /etc/apache2/httpd.conf) ve VirtualHost'unuza aşağıdakileri ekleyin:

# Optionally load the headers module:
LoadModule headers_module modules/mod_headers.so

<VirtualHost 67.89.123.45:443>
    Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
</VirtualHost>

https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security


2

Tüm httpistekleri şuraya yönlendirmek için httpsşunları kullanabilirsiniz:

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [NE,L,R]

Mod-yeniden yazma etkin değilse ve apache 2.4 kullanıyorsanız, istekleri yeniden yönlendirmek için bir Redirectifyönerge httpkullanabilirsiniz https.

Apache 2.4.

<if "%{HTTPS} !~ /on/">
Redirect / https://www.example.com/
</if>

2

Siteniz için doğrudan apache yapılandırmasına erişemediğiniz bir durumdaysanız, barındırılan birçok platform bu şekilde hala kısıtlıdır, o zaman aslında iki adımlı bir yaklaşım öneririm. Apache'nin kendilerinin öncelikle yapılandırma seçeneklerini HTTP ve HTTPS için mod_rewrite üzerinden kullanmanız gerektiğini belgelemelerinin nedeni.

İlk olarak, yukarıda belirtildiği gibi, .htaccess mod_rewrite kurallarınızı kurarsınız:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Daha sonra, PHP dosyalarınızda (durumunuz için uygun olan her yerde bunu yapmanız gerekir, bazı siteler tüm istekleri tek bir PHP dosyası aracılığıyla huniler, diğerleri ihtiyaçlarına ve yapılan isteğe bağlı olarak çeşitli sayfalar sunar ):

<?php if ($_SERVER['HTTPS'] != 'on') { exit(1); } ?>

Yukarıdakilerin güvenli olmayan bir ortamda güvenli verileri açığa çıkarabilecek herhangi bir kod ÖNCE çalıştırılması gerekir. Böylece, siteniz HTACCESS ve mod_rewrite üzerinden otomatik yeniden yönlendirme kullanırken, komut dosyalarınız HTTPS üzerinden erişilmediğinde hiçbir çıkışın sağlanmamasını sağlar.

Sanırım çoğu insan böyle düşünmüyor ve Apache bu yöntemi mümkün olan yerlerde kullanmamanızı tavsiye ediyor. Bununla birlikte, kullanıcı verilerinizin güvenli olduğundan emin olmak için geliştirme sonunda ek bir kontrol yapmanız yeterlidir. Umarım bu bizim barındırma hizmetleri kısıtlamaları nedeniyle tavsiye edilmeyen yöntemleri kullanarak bakmak zorunda olabilir başkasına yardımcı olur.


1

.Htaccess aracılığıyla Bu yardımcı olacaktır.

RewriteEngine On


RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]

Ayrıca, Daha Fazla Ayrıntı için buna bakın. Http'yi Https'ye nasıl yönlendirirsiniz?


1
Bu, "Çok fazla yönlendirme hatası" alan ve allowOverride özelliğini değiştiremeyen herkes için bir çözümdür.
Tek renkli

1

Diğer şeyler için mod_rewrite gerekmedikçe, Apache core IF yönergesini kullanmak daha temiz ve hızlıdır:

<If "%{HTTPS} == 'off'">
Redirect permanent / https://yoursite.com/
</If>

IF yönergesine www öneki olmadan tek bir kurallı etki alanı sağlama gibi daha fazla koşul ekleyebilirsiniz:

<If "req('Host') != 'myonetruesite.com' || %{HTTPS} == 'off'">
Redirect permanent / https://myonetruesite.com/
</If>

Her şey için mod_rewrite kullanımında çok fazla atalet ataleti vardır, ancak bunun sizin için işe yarayıp yaramadığına bakın.

Daha fazla bilgi: https://httpd.apache.org/docs/2.4/mod/core.html#if

Çalışırken görmek için (www yerine veya https: // veya .com yerine .net olmadan deneyin): https://nohodental.com/ (üzerinde çalıştığım bir site).



0

Sitemin tüm sayfalarını http'den benim için çalışan https'deki sayfaların analoguna yönlendirmeye zorlayan bir yöntem buldum.

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

0
 Redirect 301 / https://example.com/

(yukarıdaki cevapların hiçbiri işe yaramadığında benim için çalıştı)

Bonus:

ServerAlias www.example.com example.com

(sabit https: // www .example.com bulunamadı)


0

Bu, tüm URL'leri https ve www'ye yönlendirir

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTPS_HOST} !^www.example.com$ [NC,OR]
RewriteCond %{HTTP_HOST} !^www.example.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]

0

Tomcat sunucusundan yapmak istiyorsanız aşağıdaki adımları izleyin

Bağımsız bir Apache Tomcat (8.5.x) HTTP Sunucusunda, kullanıcı www.domain.com yazdığında otomatik olarak https (www.domain.com) sitesine yönlendirilecek şekilde nasıl yapılandırılabilir.

Kapanış etiketinden önce [Tomcat_base] /conf/web.xml dosyasına aşağıdakileri dahil etmenin 2 adımlı yöntemi

step 1: 
<security-constraint>
<web-resource-collection>
<web-resource-name>HTTPSOnly</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>

ve [Tomcat_base] /conf/server.xml bağlayıcı ayarlarının yapılması:

step 2:
<Connector URIEncoding="utf-8" connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="443"/>
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="[keystorelocation]" type="RSA" />
</SSLHostConfig>
</Connector>

Not: https yapılandırmasını zaten yaptıysanız ve yönlendirmeye çalışıyorsanız yalnızca 1. adımı uygulayın.



-1

Bu sorunun farklı bir kenarı, bir Yük Dengeleyicinin devreye girmesidir.

Durum şu şekildedir: - Tarayıcıdan Yük Dengeleyiciye ve arkadan gelen trafik HTTPS'dir - Yük Dengeleyici ile gerçek WebServer arasındaki trafik HTTP'dir.

Bu nedenle, PHP veya Apache'deki tüm sunucu isteği değişkenleri bağlantının sadece HTTP olduğunu gösterir. Sunucudaki HTTP ve HTTPS dizinleri aynıdır.

Onaylanan yanıttaki RewriteCondition çalışmıyor. Ya bir döngü veriyor ya da çalışmıyor.

Soru: Bu bir Yük Dengeleyici üzerinde nasıl çalışır.

(Ya da Yük Dengeleyici yanlış yapılandırılmış. Bunu umuyorum, çünkü o zaman sorunu WebHosting şirketine taşıyabilirim :-))


Yeniden yönlendirme sadece yük dengeleyicide gerçekleşmelidir. Yük dengeleyicinin türüne bağlı olarak, bu yapılandırmada mümkün olmalıdır veya kabul edilen cevabın çalışacağı bir apache örneğinin kendisidir. Sadece tek düğümlerde yapmayın.
marc82ch

-1

Https trafiğini kabul eden ve http ile sunucularınıza yönlendiren bir Amazon Web Hizmetleri Elastik Yük Dengeleyici kullanıyorsanız, tüm http trafiğini https'ye yönlendirmenin doğru yolu burada açıklanmıştır: https://aws.amazon. com / premiumsupport / bilgi-merkezi / yönlendirme-http-https elb

Yük dengeleyiciden her zaman http isteklerinde bulunan X-Forwarded-Proto başlığını (http veya https içerir), burada açıklandığı gibi kullanın: https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/x- iletilen-headers.html

Httpd.conf dosyasında:

<VirtualHost *:80>

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]

</VirtualHost>

Veya kök .htaccess dosyanızda:

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]

Bonus: http trafiğini yerel geliştirme makinenize yönlendirmeye çalışmaz.


-1

Benim için çalışıyor:

<IfModule mod_rewrite.c>
 RewriteEngine On
  RewriteCond %{HTTPS} !on
  RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>

ve örneğin, http: // sunucu / foo? email = birisi% 40example.com herhangi bir sorun olmadan normal şekilde yeniden yönlendirir. Web sitesi kök klasöründe bulunan .htaccess dosyası (örneğin public_html olarak adlandırılır). Kullanmak mümkündür RewriteCond% {SERVER_PORT}! ^ 443 $ yerine RewriteCond% {HTTPS}! Üzerinde

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.