Cara terbaik untuk mengalihkan semua HTTP ke HTTPS di IIS

26

Kami ingin SEMUA situs di server web kami (IIS 10) memberlakukan SSL (yaitu mengalihkan HTTP ke HTTPS).

Kami saat ini 'Membutuhkan SSL' di setiap situs dan menyiapkan 403 errorpenangan untuk melakukan 302 redirectke alamat https untuk situs tertentu.

Ini sangat bagus. Tapi itu menyakitkan untuk dilakukan untuk setiap situs, ada banyak ruang untuk kesalahan manusia.

Idealnya saya ingin mendirikan sebuah permanen 301 redirectpada semua HTTP://*keHTTPS://*

Apakah ada cara sederhana untuk melakukan ini di IIS?

userSteve
sumber
Tidak bisakah Anda menulis skrip untuk membuat perubahan ini untuk setiap situs yang akan mengurangi beban administrasi dan juga membantu mencegah kesalahan ketik dan kesalahan?
Todd Wilcox
1
Judulnya salah. Saya pikir itu dimaksudkan untuk membaca "Cara terbaik untuk mengarahkan semua HTTP ke HTTPS di IIS"
Mick
@ToddWilcox dapatkah Anda memberikan contoh skrip seperti itu?
userSteve
Jangan gunakan IIS

Jawaban:

40

Modul Penulisan Ulang URL IIS 2.1 untuk IIS7 + mungkin adalah teman Anda. Modul ini dapat diunduh dari IIS URL Rewrite . Menggunakan Modul Penulisan Ulang URL dan Referensi Konfigurasi Modul Penulisan Ulang 2,0 menjelaskan cara menggunakan modul.

Setelah modul diinstal, Anda dapat membuat pengalihan lebar host menggunakan IIS Manager. Pilih URL Penulisan Ulang , Tambah Aturan ... , dan Aturan kosong .

Nama:
Redirect ke HTTPS

URL cocok URL yang
diminta: Matches the Pattern
Menggunakan: Wildcards
Pola: *
Abaikan case: Diperiksa

Kondisi
Pengelompokan logis: Match Any
Input kondisi : {HTTPS}
Periksa apakah string input: Matches the Pattern
Pola: OFF
Abaikan case: Checked
Track capture groups Lintas kondisi: Tidak dicentang

Variabel Server
Biarkan kosong.

Tindakan
Jenis tindakan: Redirect
Redirect URL: https://{HTTP_HOST}{REQUEST_URI}
Menambahkan string kueri: Tidak dicentang
Jenis pengalihan: Permanent (301)

Terapkan aturan dan jalankan IISReset (atau klik Restart di IIS Manager)

Atau, setelah menginstal modul Anda dapat memodifikasi file applicationHost.config sebagai berikut:

<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>
sippybear
sumber
Apakah ini akan berfungsi untuk pengalihan 301 permanen?
userSteve
@userSteve sesuai jawaban di atas, Anda dapat memilih jenis pengalihan.
BE77Y
@userSteve whoops, ya Anda harus bisa mengubah Redirect Type ke 301 dan mendapatkan hasil yang sama
sippybear
1
@sippybear satu pertanyaan lagi - apa artinya input = "{HTTPS}"? Haruskah ini {HTTP} karena itu akan menjadi input dan HTTP output?
userSteve
3
{HTTPS} adalah variabel yang Anda minta untuk mengetahui apakah koneksi diamankan. Anda dapat membaca lebih lanjut tentang ini di sini: docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/... Dalam kasus ini, kami memeriksa apakah {HTTPS} "mati", dan kemudian mengarahkan kembali jika itu
sippybear
1

Penelitian saya menunjukkan bahwa ini mungkin cara yang lebih baik untuk mengarahkan ulang:

<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>
Malaikat Jatuh
sumber
1
Bisakah Anda jelaskan mengapa ini lebih baik?
userSteve
Maaf saya tidak bisa menjelaskannya sendiri, baca saja di beberapa tempat yang sintaksinya lebih baik.
Fallen Angel
1
apakah Anda punya sumber?
dangel
1
Ini persis aturan yang sama seperti di serverfault.com/a/893804/7184 , tetapi ditulis menggunakan ekspresi reguler dan Cocokkan semua pengelompokan. Salah satu kelebihannya adalah ekspresi aturan menggunakan aturan default dan terser.
bzlm
Saya menggunakan IIS 10 dan jawaban yang dipilih tidak bekerja untuk saya. Untuk beberapa alasan IIS tidak mengenali sintaksis sebagai aturan yang valid. Saya menyisipkan kode Anda dan segera bekerja, terima kasih telah berbagi.
Jordan