IIS7: HTTP-> HTTPS Cleanly


Jawaban:


177

Saya pikir cara terbersih adalah seperti yang dijelaskan di sini di IIS-aid.com . Ini web.config saja dan jadi jika Anda mengubah server Anda tidak harus mengingat semua langkah yang Anda lalui dengan halaman kesalahan 403.4 kustom atau izin khusus lainnya, itu hanya berfungsi.

<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="HTTP to HTTPS redirect" stopProcessing="true">
          <match url="(.*)" />
            <conditions>
              <add input="{HTTPS}" pattern="off" ignoreCase="true" />
            </conditions>
            <action type="Redirect" redirectType="Permanent" url="https://{HTTP_HOST}/{R:1}" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

9
Ini berfungsi untuk saya dengan pengecualian bahwa saya harus memodifikasi URL pengalihan ke https: // {HTTP_HOST} {REQUEST_URI}
Andrew S

6
Ini juga bekerja untuk saya. Saya harus menambahkan aplikasi yang saya jalankan di ... localhost / app1 => http: // {HTTP_HOST} / app1 / {R: 1}
RealSollyM

15
Bagi siapa pun yang belum memiliki bagian penulisan ulang, letakkan aturan di bagian web.config berikut: <system.webServer><rewrite> <rules> ... </rules> </rewrite> </ system .webServer>
raider33

16
pastikan Modul Penulisan Ulang URL Microsoft diinstal di server IIS
Iman

7
Untuk alasan SEO, Anda harus menggunakan redirectType = "Permanen". Tinjau support.google.com/webmasters/answer/…
Niels Bosma

14

Solusi paling mudah dan bersih yang saya temukan adalah

  1. Dalam Pengaturan SSL -> memerlukan SSL

  2. Di Halaman Kesalahan -> Pada kesalahan 403,4 -> Redirect ke situs HTTPS

  3. Di Halaman Kesalahan -> Edit Pengaturan Fitur ... -> Setel kesalahan terperinci untuk permintaan lokal dan halaman kesalahan khusus untuk permintaan jarak jauh

Keuntungannya adalah tidak memerlukan baris kode tambahan. Kekurangannya adalah itu mengarahkan Anda ke url absolut.


1
berfungsi dengan baik (pada IIS 8.5 / 2012 R2). dan tidak mengutak-atik web.config
schmendrick

Bisakah Anda memberi contoh kelemahan ini? Dalam keadaan apa itu akan terjadi dan mengapa itu hal yang negatif? Jika Anda bisa menambahkannya ke jawaban Anda, itu akan bagus. Terima kasih banyak!
Marcos Dimitrio

2
@MarcosDimitrio Saya tidak yakin karena sudah lama sekali. tapi saya percaya ketika saya bermaksud bahwa itu mengarahkan Anda ke url absolut saya berarti "url dasar". Misalnya "http": // mywebsite.com/hellokitty akan dialihkan ke "https": // mywebsite.com sehingga kehilangan beberapa informasi jalur, ini akan memutus setiap tautan yang ada dengan informasi jalur tambahan.
ColacX

5

Cara yang bersih hanya mengubah skema URL dari http -> https dan membiarkan semuanya setara. Itu harus sisi server sehingga tidak ada masalah browser.

JPPinto.com memiliki petunjuk Langkah-demi-Langkah tentang bagaimana hal ini dilakukan, kecuali bahwa mereka menggunakan javascript (HttpRedirect.htm) alih-alih pengalihan sisi server. Untuk beberapa alasan, saya tidak bisa membuat IE menjalankan javascript jika Anda mengaktifkan 'Tampilkan pesan kesalahan HTTP ramah', yang diaktifkan secara default. Hal lain dengan skrip adalah pengalihan ke jalur tidak berfungsi bahkan di FF atau Chrome. Script selalu dialihkan ke root. (Mungkin saya telah melewatkan sesuatu, karena itu harus diarahkan ke jalan.)

Untuk alasan ini saya telah menggunakan halaman ASP untuk pengalihan. Kelemahannya tentu saja ini membutuhkan ASP klasik untuk diaktifkan di server.

OpsanBlog memiliki skrip ASP dan instruksi yang berfungsi baik dengan IIS6.

Saya punya beberapa masalah menggunakan metode ini dengan IIS7. Masalah antarmuka pengguna sebagian besar, karena IIS7 membuatnya sangat mudah untuk melewatkan sesuatu.

  • Pertama, Anda perlu menginstal ASP sebagai fitur peran server web.
  • Kedua, menggunakan direktori virtual tidak berfungsi seperti yang diharapkan di IIS7 dan saya tidak mencoba untuk men-debug ini. Sebagai gantinya, saya meletakkan file di folder root situs dan menggunakan url '/SSLRedirect.asp' di halaman kesalahan 403.4 untuk referensi.
  • Terakhir, bagian yang paling sulit, Anda TIDAK harus menegakkan SSL untuk SSLRedirect.asp . Kalau tidak, Anda akan mendapatkan kesalahan 403.4. Untuk melakukan ini, Anda memilih file di IIS7 'Tampilan Konten', dan beralih ke 'Tampilan Fitur' sehingga Anda dapat mengedit pengaturan SSL untuk file tunggal dan menonaktifkan kotak centang 'Memerlukan SSL'.

Manajer IIS harus menunjukkan nama file di header.


1
Instruksi yang tertaut di JPPinto.com telah diperbarui untuk menyoroti bahwa ini tidak berfungsi pada IIS 7.5 atau R2. Mereka mengatakan Anda akan mendapatkan pelanggaran kunci karena perubahan keamanan di versi IIS yang lebih baru. Mereka menyarankan menggunakan metode URL Rewrite 2.0 (pendekatan yang sama sesuai jawaban dari @toxaq).
Robert Shattock

0

Global.asax

protected void Application_BeginRequest()
{
if (!Context.Request.Url.AbsoluteUri.Contains("localhost") && !Context.Request.IsSecureConnection)
Response.Redirect(Context.Request.Url.ToString().Replace("http:", "https:"));
}

1
Saya dapat dengan mudah menyiasati pengalihan ini dengan meletakkan "localhost" di suatu tempat ke dalam URI, mis. String kueri yourdomain.com?localhost=true saya akan menyarankan memeriksa properti Request.Url.Host sebagai gantinya
Aidy J

0

Saya menggunakan asp klasik (intranet) dan pada halaman yang memerlukan login log file sertakan melakukan pengalihan:

if Request.ServerVariables("SERVER_PORT_SECURE") <> "1" or Request.ServerVariables("HTTPS") <> "on" then 
    Response.Redirect "https://" & Request.ServerVariables("SERVER_NAME") & Request.ServerVariables("URL")
end if

Ini tentu saja tidak termasuk data GET atau POST. Jadi sebenarnya ini adalah pengalihan bersih ke halaman aman Anda.


-4

Saya pikir dengan 'bersih' yang Anda maksud dengan 300 redirect. Konfigurasi untuk banyak server & bahasa di sini .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.