IIS7: HTTP-> HTTPS Temiz Bir Şekilde


146

Bir sitenin HTTP: // sürümüne gitme girişimlerini HTTPS: // eşdeğerine yeniden yönlendirmenin temiz bir yolu var mı?


Cevap James Kovac'ın
cpuguru

IIS 7 ve R2 üzerindeyseniz işte çalışan ve en "temiz" olan bir kılavuz
Ujwal Parker

Yanıtlar:


177

Bence en temiz yol, burada IIS-aid.com'da açıklandığı gibi . Yalnızca web.config'dir ve bu nedenle sunucuyu değiştirirseniz 403.4 özel hata sayfası veya diğer özel izinlerle uyguladığınız tüm adımları hatırlamak zorunda kalmazsınız, sadece çalışır.

<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
Bu, yönlendirme URL'sini https: // {HTTP_HOST} {REQUEST_URI}
Andrew S

6
Bu benim için de çalıştı. Çalıştırdığım uygulamayı eklemek zorunda kaldım ... localhost / app1 => http: // {HTTP_HOST} / app1 / {R: 1}
RealSollyM

15
Halihazırda yeniden yazma bölümü olmayanlar için, kuralları web.config'in şu bölümlerine yerleştirin: <system.webServer><rewrite> <rules> ... </rules> </rewrite> </ system .webServer>
raider33

16
Microsoft URL Yeniden Yazma Modülünün IIS sunucusunda kurulu olduğundan emin olun
Iman

7
SEO nedenleriyle redirectType = "Kalıcı" kullanmalısınız. İnceleme support.google.com/webmasters/answer/...
Niels Bosma

14

Bulduğum en kolay ve temiz çözüm,

  1. SSL Ayarlarında -> SSL gerektir

  2. Hata Sayfalarında -> 403.4'te hata -> HTTPS sitesine yönlendir

  3. Hata Sayfalarında -> Özellik Ayarlarını Düzenle ... -> Yerel istekler için Ayrıntılı hataları ve uzak istek için özel hata sayfalarını ayarlayın

Yararı, fazladan kod satırı gerektirmemesidir. Dezavantajı, sizi mutlak bir url'ye yönlendirmesidir.


1
mükemmel çalışır (IIS 8.5 / 2012 R2'de). ve web.config ile uğraşmak yok
schmendrick

Bu olumsuzluğa bir örnek verebilir misiniz lütfen? Hangi koşullarda olur ve neden olumsuz bir şeydir? Cevabınıza ekleyebilirseniz, bu harika olur. Çok teşekkürler!
Marcos Dimitrio

2
@MarcosDimitrio Çok uzun zaman önce olduğundan emin değilim. ancak sizi mutlak bir url'ye yönlendirdiğini kastettiğimde "temel url" yi kastettiğime inanıyorum. Örneğin, "http": //mywebsite.com/hellokitty, "https": //mywebsite.com'a yeniden yönlendirilir ve böylece bazı yol bilgileri kaybedilir, bu, mevcut her bağlantıyı fazladan yol bilgisiyle bozar.
ColacX

5

Temiz bir yol, yalnızca URL şemasını http -> https'den değiştirir ve diğer her şeyi eşdeğer bırakır. Tarayıcı sorunu olmaması için sunucu tarafında olmalıdır.

JPPinto.com, sunucu tarafı yönlendirme yerine javascript (HttpRedirect.htm) kullanmaları dışında, bunun nasıl yapılacağına dair Adım Adım talimatlara sahiptir . Varsayılan olarak açık olan 'Açıklayıcı HTTP hata mesajlarını göster' etkinse, bazı nedenlerden dolayı IE'nin javascript'i çalıştırmasını sağlayamadım. Komut dosyasıyla ilgili başka bir şey de, yola yeniden yönlendirmenin FF veya Chrome'da bile çalışmadığıdır. Komut dosyası her zaman köke yönlendirir. (Belki bir şeyi gözden kaçırdım, çünkü yola yönlendirmesi gerekiyor.)

Bu nedenlerden dolayı yönlendirme için bir ASP sayfası kullandım. Elbette olumsuz yanı, klasik ASP'nin sunucuda etkinleştirilmesini gerektirmesidir.

OpsanBlog'un bir ASP betiği ve IIS6 ile iyi çalışan yönergeleri vardır.

IIS7 ile bu yöntemi kullanırken birkaç sorun yaşadım. IIS7 bir şeyi gözden kaçırmayı gerçekten kolaylaştırdığı için çoğunlukla kullanıcı arabirimi sorunları.

  • Öncelikle, ASP'yi bir web sunucusu rolü özelliği olarak yüklemeniz gerekir.
  • İkinci olarak, sanal bir dizin kullanmak IIS7'de beklendiği gibi çalışmadı ve bu konuda hata ayıklamaya çalışmadım. Bunun yerine, dosyayı sitenin kök klasörüne koydum ve 403.4 hata sayfasındaki '/SSLRedirect.asp' url'sini referans olarak kullandım.
  • Son olarak, en zor kısım, SSLRedirect.asp için SSL'yi zorlamamalısınız . Aksi takdirde 403.4 hatası alırsınız. Bunu yapmak için, dosyayı IIS7 "İçerik Görünümü" nde seçer ve "Özellikler Görünümü" ne geçersiniz, böylece tek dosya için SSL ayarlarını düzenleyebilir ve "SSL Gerektir" onay kutusunu devre dışı bırakabilirsiniz.

IIS yöneticisi, başlıkta dosya adını göstermelidir.


1
JPPinto.com adresindeki bağlantılı talimatlar, bunun IIS 7.5 veya R2 üzerinde çalışmadığını vurgulayacak şekilde güncellenmiştir. IIS'nin yeni sürümlerindeki güvenlik değişiklikleri nedeniyle kilit ihlali alacağınızı söylüyorlar. Bunun yerine URL Yeniden Yazma 2.0 yöntemini kullanmanızı önerirler (@toxaq'dan gelen yanıta göre benzer yaklaşım).
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
Kolayca örneğin sorgu dizesi URI içine "localhost" bir yere, koyarak Bu yönlendirmeyi sorunun üstesinden gelebilirsiniz yourdomain.com?localhost=true yerine Request.Url.Host özelliğini kontrol öneririz
Aidy J

0

Klasik asp (intranet) kullanıyorum ve oturum açma gerektiren sayfalarda oturum açma dahil dosyası yeniden yönlendirme yapıyor:

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

Bu elbette GET veya POST verilerini içermez. Yani aslında, güvenli sayfanıza temiz bir yönlendirme.


-4

Bence 'temiz' derken, 300 yeniden yönlendirmeyi kastediyorsunuz. Burada birçok sunucu ve dil için yapılandırma .

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.