.htaccess http'yi https'ye yönlendir


86

Eski bir url'im var ( www1.test.net) ve onu https://www1.test.net
, siteme SSL sertifikamızı uygulayıp yükledim adresine yönlendirmek istiyorum.
Bu benim eski dosyam .htaccess:

RewriteEngine On
RewriteRule !\.(js|gif|jpg|png|css|txt)$ public/index.php [L]
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ public/$1 [L]

.htaccessDosyamı url’ye otomatik olarak yönlendirilecek şekilde nasıl yapılandırabilirim https?
Teşekkürler!


: İkinci satır amaçlanıyorsa gerçek dosyasının yolunu noktaları (sen ve beklenen muhtemel uzantıları listeleme ediyoruz), varolan bir dosya için bir çek ile değiştirilmesiyle daha esnek hale eğer bir yönlendirme yapamaz RewriteCond %{REQUEST_FILENAME} !-f ardından yönlendirmeniz.
diamondsea

Yanıtlar:


117

2016 Güncellemesi

Bu yanıt biraz dikkat çektiğinden, Sanal Konaklar kullanarak bunu yapmanın daha tavsiye edilen bir yolunu ipucu vermek istiyorum: Apache: SSL'yi Yeniden Yönlendir

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

<VirtualHost _default_:443>
   ServerName mysite.example.com
   DocumentRoot /usr/local/apache2/htdocs
   SSLEngine On
# etc...
</VirtualHost>

Eski cevap, ssl bağlantı noktanızın 80 olarak ayarlanmamış olduğu göz önüne alındığında, bu işe yarayacak:

RewriteEngine on

# force ssl
RewriteCond     %{SERVER_PORT} ^80$
RewriteRule     ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

Bunun ilk yeniden yazma kuralınız olması gerektiğini unutmayın.

Düzenleme: Bu kod aşağıdakileri yapar. RewriteCond (ition), isteğin ServerPort değerinin 80 olup olmadığını kontrol eder (bu varsayılan http portudur, başka bir bağlantı noktası belirlediyseniz, koşulu buna ayarlamanız gerekir). Öyleyse, tüm url'yi eşleştirip (.*)onu bir https-url'ye yönlendiririz. %{SERVER_NAME}belirli bir url ile değiştirilebilir, ancak bu şekilde diğer projeler için kodu değiştirmeniz gerekmez. %{REQUEST_URI}URL'nin TLD'den (üst düzey alan) sonraki kısmıdır, bu nedenle geldiğiniz yere https olarak yönlendirilirsiniz.


1
Teşekkürler teşekkürler ... işe yarıyor ...: D Ama, neden işe yaradığını açıklayabilir misin? ... teşekkürler ... ^^
Bàn Chân Trần

1
senin için çalıştığına sevindim. kodla ilgili açıklama için güncellenmiş yanıtı kontrol edin. Bu sizin için yeterli mi?
Jojo

1
"Bunun ilk yeniden yazma kuralınız olması gerektiğini unutmayın." @Jojo Hayatımı kurtardı adam: *
Ivan Shulev

1
Açıklamaya eklemek için. "[[L] bayrağı] ( httpd.apache.org/docs/2.4/rewrite/flags.html#flag_l ) mod_rewrite'ın kural kümesini işlemeyi durdurmasına neden olur." Genellikle bunu varsayılan olarak eklemek istersiniz. "[[R] işaretinin] ( httpd.apache.org/docs/2.4/rewrite/flags.html#flag_r ) kullanılması tarayıcıya bir HTTP yeniden yönlendirmesinin verilmesine neden olur." Aksi takdirde, yeniden yönlendirme dahili olacaktır ve bu da HTTPS kullanımının anlamını geçersiz kılar. Varsayılan olarak, verilen yönlendirme 302 durumundadır (geçici yeniden yönlendirme). Tarayıcının yeni URL'yi ("kalıcı olarak") önbelleğe almasını istiyorsanız, [R=301]bunun yerine kullanın.
Jānis Elmeris

1
VirtualHost çözümü için, karmaşık bir kurulum durumunda "Kalıcı yeniden yönlendir" ifadesinin nereye yerleştirilmesi gerektiği açık değildir. Zirveye yakın olduğunu varsaydım ve işe yaradı.
eyal_katz

178

Alanımın tüm sayfalarını başarıyla http'den https'ye yeniden yönlendirmek için aşağıdakileri kullanıyorum:

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

Bunun 301 'permanently moved', SEO sıralamanızı aktarmanıza yardımcı olacak yönlendirmeyi kullanarak yeniden yönlendireceğini unutmayın .

302 'temporarily moved'Değişikliği kullanarak yeniden yönlendirmek için[R=302,L]


5
bu "hacky" olarak kabul edilen cevaptan daha uygundur
am05mhz

7
Bazı durumlarda X-Forwarded-Proto gereklidir RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
Kuzeko

1
açık ara daha iyi cevap burada
yetenekli

Bu benim için Godaddy sunucusunda çalıştı. @Bradley Harika !!
vishnu

Bu, çeşitli sunucu ortamı ve site kurulumları altında her seferinde benim için çalıştı. Önerilen cevap IMHO olmalıdır.
John Contarino

60

Bu, wwwproxy kullanıcıları için ve proxy kullanıcıları olmayan HTTPS için ve için en iyisidir .

RewriteEngine On

### WWW & HTTPS

# ensure www.
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# ensure https
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

### WWW & HTTPS

1
www olmayana nasıl yönlendirilirim?
Elyor

bu %{HTTPS} offyeterli olmayanlar için açık ara en iyi cevap
NoodleOfDeath

10

Https'yi aşağıdaki kodla zorluyorum:

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

1
@Niby cevabımın tarihini ve "zaten orada olanı" kontrol edin lütfen.
Arda

6

HTTPS / SSL bağlantısının yük dengeleyicide sonlandırıldığı ve tüm trafiğin 80 numaralı bağlantı noktasındaki örneklere gönderildiği durumlarda, aşağıdaki kural güvenli olmayan trafiği yeniden yönlendirmek için çalışır.

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

mod_rewriteModülün yüklendiğinden emin olun .


4

Yeniden yönlendirmenin en iyi yolunu ararken şunu buldum (html5boilerplate'den geliyor):

# ----------------------------------------------------------------------
# | HTTP Strict Transport Security (HSTS)                              |
# ----------------------------------------------------------------------

# Force client-side SSL redirection.
#
# If a user types `example.com` in their browser, even if the server
# redirects them to the secure version of the website, that still leaves
# a window of opportunity (the initial HTTP connection) for an attacker
# to downgrade or redirect the request.
#
# The following header ensures that browser will ONLY connect to your
# server via HTTPS, regardless of what the users type in the browser's
# address bar.
#
# (!) Remove the `includeSubDomains` optional directive if the website's
# subdomains are not using HTTPS.
#
# http://www.html5rocks.com/en/tutorials/security/transport-layer-security/
# https://tools.ietf.org/html/draft-ietf-websec-strict-transport-sec-14#section-6.1
# http://blogs.msdn.com/b/ieinternals/archive/2014/08/18/hsts-strict-transport-security-attacks-mitigations-deployment-https.aspx

Header set Strict-Transport-Security "max-age=16070400; includeSubDomains"

Belki 2017'de birine yardımcı olur! :)


2017'de kabul edilen cevap bu olmalı. Ancak, HSTS'yi .htacces dosyası aracılığıyla etkinleştirmek için (soru bununla etiketlenmiştir) IfModule etiketlerini atlamanız gerektiğini içermelidir. Cevabınızı bununla düzenlerseniz, kabul edilen cevaptan buraya memnuniyetle
Jojo

Merhaba Jojo! Özür bu geç yanıt için, her iki çıkarmadan demek # <IfModule mod_headers.c>ve # </IfModule>hatlar?
LIIT

hey LIIT, evet demek istediğim buydu.
Jojo

1
Bu güzel ve başarmak ya da (muhtemelen) istenen etkiyi destekleyecek bu moral olsa da, bu değil https'ye yönlendirme http isteklerini, ve bu şekilde, soruya cevap vermez. Yalnızca istemci siteye HTTPS aracılığıyla zaten erişmişse çalışır (belirtilen maksimum yaş aralığı dahilinde). Bu nedenle, her zaman uygun bir yönlendirme ile birlikte sunulmalıdır.
Nicolai Ehemann

4

Bu kodu .htaccess dosyanıza ekleyin. Ve çalışmalı

RewriteCond %{HTTP_HOST} yourDomainName\.com [NC]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://yourDomainName.com/$1 [R,L]

3

Bu kodu .htaccess dosyanızın sonuna ekleyin

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

1
Muhtemelen mod_rewrite bu cevapta diğerlerinde olduğu gibi etkin olmadığı içindir.
keji

Sadece RewriteEngine onbunun üstüne eklemek , çalışmasını sağlayacaktır.
Giacomo1968

2

.Htaccess'in üstüne aşağıdakileri ekleme

RewriteEngine On
RewriteCond %{ENV:HTTPS} !=on
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

2

Bu, yeniden yönlendirmelerin şeffaf olmayan proxy'lerin tüm kombinasyonları için çalışmasını sağlar.

Bu, servis talebi istemcisi <http> proxy <https> web sunucusunu içerir .

# behind proxy
RewriteCond %{HTTP:X-FORWARDED-PROTO} ^http$
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]

# plain
RewriteCond %{HTTP:X-FORWARDED-PROTO} ^$
RewriteCond %{REQUEST_SCHEME} ^http$ [NC,OR]
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]

1

Yönlendirme ile ilgili de bir sorun yaşadım. Stackoverflow'da önerilen her şeyi denedim. Kendi kendime bulduğum tek vaka:

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP:SSL} !=1 [NC]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

-1

HTTPS'yi .htaccessDosya ile Zorlama

==> Tüm Web Trafiğini Yeniden Yönlendir: -

Tüm web trafiğini HTTPS kullanmaya zorlamak için .htaccess, web sitenizin kök klasöründeki dosyaya aşağıdaki kod satırlarını ekleyin .

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

==> Yalnızca Belirtilen Etki Alanını Yönlendir: -

Belirli bir alanı HTTPS kullanmaya zorlamak .htaccessiçin web sitenizin kök klasöründeki dosyada aşağıdaki kod satırlarını kullanın :

RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$
RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteEngine On 
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

Bu işe yaramazsa, ilk iki satırı kaldırmayı deneyin.

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

Example.com'u, https'yi zorlamaya çalıştığınız alan adıyla değiştirdiğinizden emin olun. Ek olarak, www.example.com'u gerçek alan adınızla değiştirmeniz gerekir.

==> Belirtilen Klasörü Yeniden Yönlendir: -

SSL'yi belirli bir klasöre zorlamak istiyorsanız, aşağıdaki kodu .htaccesssöz konusu klasöre yerleştirilmiş bir dosyaya ekleyin :

RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$
RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteCond %{REQUEST_URI} folder
RewriteRule ^(.*)$ https://www.example.com/folder/$1 [R=301,L]

Klasör referansını gerçek klasör adına değiştirdiğinizden emin olun. Ardından, www.example.com/folder'ı gerçek alan adınız ve SSL'yi zorlamak istediğiniz klasörle değiştirdiğinizden emin olun.


-1

Alanınızı ile değiştirin, domainname.combenimle çalışıyor.

RewriteEngine On
RewriteCond %{HTTP_HOST} ^domainname\.com [NC]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.domainname.com/$1 [R,L]

2
Lütfen yanıt olarak yalnızca kod göndermeyin, aynı zamanda kodunuzun ne yaptığını ve sorunun sorununu nasıl çözdüğünü de açıklayın. Açıklamalı yanıtlar genellikle daha yararlıdır ve daha kalitelidir ve olumlu oyları alma olasılığı daha yüksektir.
Mark Rotteveel
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.