Czy istnieje czysty sposób na przekierowanie wszystkich prób przejścia do wersji HTTP: // witryny na jej odpowiednik HTTPS: //?
Czy istnieje czysty sposób na przekierowanie wszystkich prób przejścia do wersji HTTP: // witryny na jej odpowiednik HTTPS: //?
Odpowiedzi:
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>
Najłatwiejszym i najczystszym rozwiązaniem, jakie znalazłem, było to
W Ustawieniach SSL -> wymagaj SSL
Na stronach błędów -> W przypadku błędu 403.4 -> Przekieruj do witryny HTTPS
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.
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ć.
Menedżer usług IIS powinien wyświetlać nazwę pliku w nagłówku.
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:"));
}
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.