IIS7: czysto HTTP-> HTTPS

146

Czy istnieje czysty sposób na przekierowanie wszystkich prób przejścia do wersji HTTP: // witryny na jej odpowiednik HTTPS: //?

cpuguru
źródło
Odpowiedź można znaleźć na blogu Jamesa Kovaca: jameskovacs.com/2007/05/09/…
cpuguru
Jeśli korzystasz z IIS 7 i R2, oto przewodnik, który działa i jest najbardziej „czysty”
Ujwal Parker

Odpowiedzi:

177

Myślę, że najczystszy sposób jest opisany tutaj na IIS-aid.com . Jest to tylko plik web.config, więc jeśli zmienisz serwer, nie musisz pamiętać wszystkich kroków wykonanych przez niestandardową stronę błędu 403.4 lub innych specjalnych uprawnień, po prostu działa.

<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>
toxaq
źródło
9
To zadziałało dla mnie, z wyjątkiem tego, że musiałem zmodyfikować adres URL przekierowania na https: // {HTTP_HOST} {REQUEST_URI}
Andrew S
6
To też zadziałało dla mnie. Musiałem dodać aplikację, którą uruchomiłem pod ... localhost / app1 => http: // {HTTP_HOST} / app1 / {R: 1}
RealSollyM
15
Dla każdego, kto nie ma jeszcze sekcji przepisywania, umieść reguły w następujących sekcjach web.config: <system.webServer><rewrite> <rules> ... </rules> </rewrite> </ system .webServer>
raider33
16
upewnij się, że moduł ponownego zapisywania adresów URL firmy Microsoft jest zainstalowany na serwerze IIS
Iman
7
Ze względów SEO powinieneś użyć redirectType = "Permanent". Przejrzyj support.google.com/webmasters/answer/…
Niels Bosma
14

Najłatwiejszym i najczystszym rozwiązaniem, jakie znalazłem, było to

  1. W Ustawieniach SSL -> wymagaj SSL

  2. Na stronach błędów -> W przypadku błędu 403.4 -> Przekieruj do witryny HTTPS

  3. Na stronach błędów -> Edytuj ustawienia funkcji ... -> Ustaw szczegółowe błędy dla żądań lokalnych i niestandardowe strony błędów dla żądania zdalnego

Zaletą jest to, że nie wymaga dodatkowych wierszy kodu. Wadą jest to, że przekierowuje Cię do bezwzględnego adresu URL.

ColacX
źródło
1
działa doskonale (w IIS 8.5 / 2012 R2). i bez majstrowania przy web.config
schmendrick
Czy mógłbyś podać przykład tego wady? W jakich okolicznościach to by się stało i dlaczego jest to negatywne? Byłoby wspaniale, gdybyś mógł dodać to do swojej odpowiedzi. Wielkie dzięki!
Marcos Dimitrio
2
@MarcosDimitrio Nie jestem pewien, ponieważ to było tak dawno temu. ale wydaje mi się, że kiedy miałem na myśli przekierowanie do bezwzględnego adresu URL, miałem na myśli „podstawowy adres URL”. Na przykład „http”: //mojawitryna.com/hellokitty zostałby przekierowany do „https”: //mojawitryna.com, tracąc w ten sposób część informacji o ścieżce, co spowodowałoby zerwanie każdego istniejącego łącza z dodatkowymi informacjami o ścieżce.
ColacX
5

Czysty sposób zmienia tylko schemat adresu URL z http -> https i pozostawia równoważne wszystko inne. Powinien znajdować się po stronie serwera, aby nie było problemów z przeglądarką.

JPPinto.com zawiera instrukcje krok po kroku, jak to zrobić, z tym wyjątkiem, że używają javascript (HttpRedirect.htm) zamiast przekierowania po stronie serwera. Z jakiegoś powodu nie mogłem uruchomić IE skryptu javascript, jeśli masz włączoną opcję „Pokaż przyjazne komunikaty o błędach HTTP”, która jest domyślnie włączona. Inną rzeczą związaną ze skryptem jest to, że przekierowanie do ścieżki nie działało nawet w FF lub Chrome. Skrypt zawsze przekierowuje do roota. (Może coś przeoczyłem, ponieważ powinno przekierować do ścieżki.)

Z tych powodów do przekierowania użyłem strony ASP. Wadą jest oczywiście to, że wymaga to włączenia klasycznej ASP na serwerze.

OpsanBlog zawiera skrypt ASP i instrukcje, które dobrze współpracują z usługami IIS6.

Miałem kilka problemów z używaniem tej metody w IIS7. Głównie problemy z interfejsem użytkownika, ponieważ IIS7 sprawia, że ​​naprawdę łatwo jest coś przeoczyć.

  • Najpierw musisz zainstalować ASP jako funkcję roli serwera WWW.
  • Po drugie, korzystanie z katalogu wirtualnego nie działało zgodnie z oczekiwaniami w IIS7 i nie próbowałem tego debugować. Zamiast tego umieściłem plik w folderze głównym witryny i użyłem adresu URL „/SSLRedirect.asp” na stronie błędu 403.4, aby się do niego odwołać.
  • Ostatnia, najtrudniejsza część, NIE WOLNO wymuszać SSL dla SSLRedirect.asp . W przeciwnym razie pojawi się błąd 403.4. W tym celu należy wybrać plik w „Widok zawartości” IIS7 i przełączyć się na „Widok funkcji”, aby można było edytować ustawienia SSL dla pojedynczego pliku i wyłączyć pole wyboru „Wymagaj SSL”.

Menedżer usług IIS powinien wyświetlać nazwę pliku w nagłówku.

mika
źródło
1
Połączone instrukcje na JPPinto.com zostały zaktualizowane w celu podkreślenia, że ​​nie działa to w usługach IIS 7.5 lub R2. Mówią, że dojdzie do naruszenia blokady z powodu zmian w zabezpieczeniach w nowszych wersjach usług IIS. Sugerują zamiast tego użycie metody URL Rewrite 2.0 (podobnie jak w odpowiedzi z @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:"));
}
zestaw narzędzi
źródło
1
Mogę łatwo obejść to przekierowanie, umieszczając "localhost" gdzieś w URI, np. Ciąg zapytania twojadomena.com?localhost=true Zamiast tego sugerowałbym sprawdzenie właściwości Request.Url.Host
Aidy J
0

Używam klasycznego asp (intranet) i na stronach, które wymagają logowania, plik dołączania logowania wykonuje przekierowanie:

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

To oczywiście nie obejmuje danych GET ani POST. W efekcie jest to czyste przekierowanie do zabezpieczonej strony.

Jean-Marc
źródło
-4

Myślę, że przez „czysto” masz na myśli przekierowanie 300. Konfiguracja dla wielu serwerów i języków tutaj .

slipsec
źródło