2013-04-02 14 views
12

Niedawno otrzymałem certyfikat SSL dla mojej witryny i chcę przekierować cały ruch do HTTPS. Mam wszystko, aby przejść do https://mydomain.com, ale jeśli ktoś wejdzie http://mydomain.com/anotherpage, porzuca drugą stronę i po prostu przenosi użytkownika na stronę główną.Przekierowanie względne HTTP IIS do HTTPS

Moja zasada w moim pliku web.config wygląda następująco:

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

Próbowałem też https://{HTTP_HOST}{REQUEST_URI} bez powodzenia. Czy ktoś może mi powiedzieć, co muszę zrobić, aby witryna przekierowała do właściwej wersji strony HTTPS? Mam wrażenie, że ma to coś wspólnego ze schematem, ale nie potrafię wymyślić składni.

+0

Myślę, że ma to coś wspólnego z referencją. Co się stanie, jeśli zmienisz wzorzec na 'url =". * "' I przepisujesz na 'url =" https: // {HTTP_HOST}/{R: 0} "'? – cheesemacfly

+0

To nadal przekierowuje wszystko z powrotem na stronę główną. – user2234612

+0

To naprawdę dziwne. Będziesz musiał użyć narzędzia [nieudane śledzenie żądań] (http://www.iis.net/learn/extensions/url-rewrite-module/using-failed-request-tracing-to-trace-rewrite-rules), aby zobacz skąd bierze się problem. – cheesemacfly

Odpowiedz

5

go zmienić na:

<rewrite> 
    <rules> 
     <rule name="Redirect 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> 
+2

Jaka jest tutaj kluczowa zmiana? 'pattern ="^OFF $ "'? – Zapnologica

12

znalazłem sposób, aby to zrobić, i nie trzeba moduł Rewrite dla niego.
Następujące pracował dla mnie na Windows 8 (IIS 8.5):

  1. Usuń wiązania z witryny HTTP (pozostaw HTTPS na miejscu)
  2. Dodaj inną stronę
  3. Upewnij się, że nowa strona ma HTTP wiązanie
  4. Konfigurowanie przekierowania HTTP, jak pokazano:

enter image description here

teraz inni l Żądanie HTTP przekieruje Cię do Twojej strony HTTPS i zachowa resztę adresu URL.

+0

Wow genialne rozwiązanie - jeśli to działa.spróbuję tego. – Riz

+0

niesamowite, zadziałało! był również w stanie powiązać adres IP, aby przekierować do https! Dzięki! – Riz

0

Wierzę, że odpowiedź AndyH jest najłatwiejsza i najlepsza. Odkryłem, że używanie przepisywania URL-ów może również kolidować z kodem, który może przekierować użytkownika na inną stronę. IT często zepsuł się w naszym środowisku. Ale rozwiązanie Andy'ego działało bez zarzutu. Sądzę też, że rozwiązanie Andy'ego będzie mniej obciążało serwer, ponieważ nie musi badać każdego adresu URL, który trafia na niego w przypadku możliwych warunków ponownego zapisu.

1

Nie mogę jeszcze komentować lub zostawię to jako komentarz pod odpowiedzią AndyH. Rozwiązanie było poprawne, chociaż uderzyłem w kolejny dodatkowy problem (prawdopodobnie związany z korzystaniem z serwera Coldfusion firmy Adobe). Chciałem podzielić się kilkoma dalszymi badaniami, które musiałem wykonać dla każdej innej nieszczęsnej duszy, która może się na nią natknąć.

Po skonfigurowaniu przekierowanie zawsze kończy adresem URL:

https://xxx.xxx.com/jakarta/isapi_redirect.dll 

Poprawkę dotyczącą tego znalezionego w wątku Adobe (https://forums.adobe.com/thread/1034854): Musiałem zmienić ustawienia puli aplikacji w następujący sposób:

Prawdziwe serwis (HTTPS wiążące tylko, faktycznie zawiera kod i katalogów wirtualnych) Ustawienia zaawansowane puli aplikacji to: Enable 32-Bit Applications : False

Http_Redirect witryny (tylko HTTP wiążącej, jest ab lank shell folderu bez katalogów) Ustawienia zaawansowane puli aplikacji za: Enable 32-Bit Applications : True


EDIT: Kolejny szczegół, związany z kwerendy zachowanie wyrażenie:

Per sugestii w tym poście (http://www.developerfusion.com/code/4678/permanent-301-redirect-with-querystring-in-iis/)

Dodaj $S$Q na końcu domeny i upewnij się, że pole dla Redirect all requests to exact destination jest zaznaczone. Następnie zapisze również ciąg zapytania.

1

Miałem ten sam problem, gdy R:1 upuszczał moje foldery. Naprawiłem to tak.

<rule name="http to https" stopProcessing="true"> 
    <match url="(.*)" /> 
    <conditions> 
     <add input="{HTTPS}" pattern="^OFF$" /> 
    </conditions> 
    <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" 
      appendQueryString="false" redirectType="SeeOther" /> 
</rule> 
0


znalazłem rozwiązania:

rozważyć, co w IIS jest consired stronę internetową: po prostu zbiór zasad, ścieżka, w której się pliki i jego powiązań.

Ponadto, dostępna funkcja o nazwie „przekierowania HTTP” (zawarte standartowo w IIS), który przekierować do innego hosta, utrzymując cały podkatalog (to sprawia, że ​​ścieżki względnej). Rozwiązaniem jest pozostawienie tylko wiązania dla HTTPS (port 443) w Twojej witrynie i utworzenie kolejnego z wiązaniem dla HTTP (port 80) i ustawienie dla tego przekierowania HTTP do adresu URL z https://.

Weźmy na przykład stronę o nazwie mytest i jej adresy URL: http://www.mytest.com/ i https://www.mytest.com/. Ustaw dla niego zamiast wiązania tylko na https://www.mytest.com/ i usuń powiązanie http. Następnie utwórz nową witrynę internetową o tej samej ścieżce lokalnej, o nazwie mytest http z tylko wiązaniem przez port 80 (http://www.mytest.com/) i ustaw dla tego HTTP Redirect na https://www.mytest.com/.
Prosty i czysty, a to powinno być tak szybkie, jak bezpośrednio URL https dla użytkownika, ponieważ jest to tylko wewnętrzne przekierowanie. Mam nadzieję, że to zadziała dla Ciebie!

Powiązane problemy