IIS’de tüm HTTP’yi HTTPS’ye yönlendirmenin en iyi yolu


26

Web sunucumuzdaki (IIS 10) TÜM sitelerin SSL’yi zorlamasını istiyoruz (örneğin, HTTP’yi HTTPS’ye yönlendirmek).

Şu anda her sitede 'SSL İsteniyor' ve söz konusu sitenin https adresine yapılacak bir 403 errorişleyici ayarlıyoruz 302 redirect.

Bu harika çalışıyor. Ancak her site için yapılması gereken bir acı, insan hatası için yeterince yer var.

İdeal 301 redirectolarak herkes HTTP://*için kalıcı olmak istiyorumHTTPS://*

Bunu IIS'de yapmanın basit bir yolu var mı?


Hem yönetim yükünü azaltan hem de yazım hataları ve hataları önlemeye yardımcı olacak her site için bu değişikliği yapmak üzere bir senaryo yazamaz mısınız?
Todd Wilcox

1
Başlık yanlış. "IIS’deki tüm HTTP’yi HTTPS’ye yönlendirmenin en iyi yolu"
Mick

@ToddWilcox böyle bir betiğin bir örneğini verebilir misiniz?
userSteve

IIS kullanmayın

Yanıtlar:


40

IIS7 + için IIS URL Yeniden Yazma Modülü 2.1 arkadaşınız olabilir. Modül, IIS URL Yeniden Yazma sayfasından indirilebilir . URL Yeniden Yazma Modülünü ve URL Yeniden Yazma Modülü 2.0 Yapılandırma Referansını kullanarak modülün nasıl kullanılacağını açıklayın.

Modül yüklendikten sonra, IIS Yöneticisi'ni kullanarak bir ana bilgisayar yönlendirmesi oluşturabilirsiniz. Seç URL Rewrite , Kural (lar) ... ekleyin ve Boş kural .

İsim:
HTTPS'ye yönlendir

URL ile Eşleşen
İstenen URL: Matches the Pattern
Kullanılıyor: Wildcards
Desen: *
Görmezden gelin : Kontrol edildi

Koşullar
Mantıksal gruplama: Match Any
Koşul girişi : {HTTPS}
Giriş dizesinin olup olmadığını kontrol edin: Matches the Pattern
Desen : Durumu OFF
yoksay: Kontrol Edilmiş Koşullar arasında
izleme yakalama grupları : Kontrol edilmedi

Sunucu Değişkenleri
Boş bırakın.

Eylem
Eylem türü: Redirect
Yönlendirme URL'si: https://{HTTP_HOST}{REQUEST_URI}
Sorgu dizesini ekle: Kontrol edilmedi
Yönlendirme türü: Permanent (301)

Kuralı uygulayın ve IISReset'i çalıştırın (veya IIS Yöneticisi'nde Yeniden Başlat'ı tıklatın).

Alternatif olarak, modülü kurduktan sonra applicationHost.config dosyasını aşağıdaki gibi değiştirebilirsiniz:

<system.webServer>
  <rewrite>
    <globalRules>
      <rule name="Redirect to HTTPS" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
        <match url="*" ignoreCase="true" negate="false" />
        <conditions logicalGrouping="MatchAny" trackAllCaptures="false">
          <add input="{HTTPS}" ignoreCase="true" matchType="Pattern" negate="false" pattern="OFF" />
        </conditions>
        <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" appendQueryString="false" redirectType="Permanent" />
      </rule>
    </globalRules>
  </rewrite>
</system.webServer>

Bu kalıcı 301 yönlendirmeleri için işe yarar mı?
userSteve

@ userSteve yukarıdaki cevaba göre, yönlendirme tipini seçebilirsiniz.
BE77Y

@ userSteve whoops, evet Yönlendirme Türünü 301 olarak değiştirebilmeli ve aynı sonuçları elde edebilmelisiniz
sippybear

1
@sippybear bir soru daha - input = "{HTTPS}" ne anlama geliyor? Bu, {HTTP} olması gerektiği gibi, giriş ve HTTP çıkışı olacak mı?
userSteve

3
{HTTPS}, bağlantının güvenli olup olmadığını öğrenmek için sorguladığınız bir değişkendir. Buradan daha fazla bilgi edinebilirsiniz: docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/… Bu durumda, {HTTPS} "kapalı" olup olmadığını kontrol ettikten sonra yönlendiriyoruz. öyle
sippybear

1

Araştırmam bunun yeniden yönlendirmenin daha iyi bir yolu olabileceğini gösteriyor:

<rewrite>
    <rules>
        <rule name="http to https" stopProcessing="true">
            <match url="(.*)" />
            <conditions>
                <add input="{HTTPS}" pattern="^OFF$" />
            </conditions>
            <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" />
        </rule>
    </rules>
</rewrite>

1
Bunun neden daha iyi olduğunu açıklayabilir misiniz?
userSteve

Özür dilerim, kendim açıklayamam, birkaç yerde sadece sentaksın daha iyi olduğunu okuyun.
Fallen Angel

1
kaynağınız var mı
dangel

1
Bu, serverfault.com/a/893804/7184 adresindeki kuralın aynısıdır , ancak düzenli ifadeler ve Tüm Gruplandırmaları Eşleştir kullanarak yazılır. Baştakilerden biri kural ifadesinin kural varsayılanlarını kullanması ve terser olmasıdır.
bzlm

IIS 10'dayım ve seçilen cevap benim için işe yaramadı. Nedense IIS, sözdizimini geçerli bir kural olarak tanımıyordu. Kodunuzu yapıştırdım ve hemen çalıştı, paylaşım için teşekkürler.
Ürdün
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.