2014-12-23 73 views
7

Mam następującą regułę przepisywania, która działa doskonale na zwykłym projekcie asp.net, działającym na IIS7.Umbraco Reguła przepisywania https powoduje nieskończoną pętlę

<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> 

Dlatego jednym z naszych stron, kiedy odwiedził w http://{domain}/aboutus przekieruje do https://{domain}/aboutus. Teraz umieszczenie tej samej reguły przepisywania w witrynie Umbraco powoduje nieskończoną pętlę. Nie mamy żadnej innej reguły przepisywania dla naszej witryny Umbraco. To prowadzi mnie do myślenia, że ​​Umbraco nieco przejmuje kontrolę nad routingiem z http na https i powoduje nieskończoną pętlę. Czego nam brakuje?

+0

Z której wersji Umbraco korzystasz? – PTuckley

+0

Cześć PTuckey, to 7.1.4 –

Odpowiedz

1

Polecam stosując następującą zasadę zamiast:

<rule name="Redirect to https" stopProcessing="true"> 
    <match url="(.*)" /> 
    <conditions> 
     <add input="{HTTPS}" pattern="off" ignoreCase="true" /> 
    </conditions> 
    <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" 
      redirectType="Permanent" appendQueryString="false" /> 
</rule> 
+0

Widziałem, że odpowiedziałeś na to w innym wątku i faktycznie próbowałem tego i to nie działa. Ponownie, reguła przepisywania działa już na zwykłej stronie asp.net, ale nie na stronie Umbraco. –

+0

Przyznaję nagrodę za tę odpowiedź, ponieważ jest ona najbliższa potrzebnemu rozwiązaniu. Przetestowałem to, wraz z przeróbką w moim pytaniu, i obaj pracowali nad nową instalacją Umbraco. Jednak mój problem nadal istnieje. –

+0

Jeśli potrzebujesz więcej pomocy, powinieneś poinformować mnie, co "nie działa" :) Umbraco nie robi samodzielnie żadnych przekierowań i z powodzeniem używam tej reguły przepisywania. Myślę, że to NIE wymaga żadnych zmian w urlRewriting.config i powinno to być pierwszą regułą przepisywania w pliku web.config (ponieważ przestaje ona przetwarzać po tym). our.umbraco.org jest lepszym miejscem do dyskusji. – sebastiaan

2

Jako Twój regex dla url nie filtruje wejście (<match url="(.*)" />), należy użyć redirectType="Permanent" parametr w kodzie:

Więcej informacji można znaleźć tutaj:
Add an Url Rewrite rule

Jedno warto zwrócić uwagę jest to, że domyślnie przekierowuje są 302 przekierowuje, jeśli chcesz zrobić 301 przekierowuje trzeba dodać co następuje:
redirectMode="Permanent"
można znaleźć pełne instrukcje dla URL re-writing komponent na swojej stronie internetowej: https://github.com/aspnetde/UrlRewritingNet

+0

Próbowałem różne redirectType, zanim napisałem moje pytanie i to nie pomaga. Ponownie, reguła przepisywania działa już na zwykłej stronie asp.net, ale nie na stronie Umbraco. Więc reguła przepisywania musi być poprawna, prawda? Więc musi być z konfiguracją w Umbraco? –

1

potencjalnym rozwiązaniem jest użycie modułu przepisywania Umbraco raczej niż przepisanie IIS.

W pliku konfiguracyjnym przepisywania URL (Config/UrlRewriting.config), następujący przepis jest prosty przykład jak przekierować z HTTP HTTPS:

<add name="https Rewrite" 
    redirect="Domain" 
    redirectMode="Permanent" 
    virtualUrl="http://(.*)" 
    destinationUrl="https://$1" 
    ignoreCase="true" /> 

Zasada ta powinna być umieszczona w sekcji <rewrites>.

Edit: Zgodnie z komentarzem Sebastiaan za moduł urlRewriting.net jest przestarzała i rozwiązanie IIS należy stosować w miarę możliwości.

+1

Niestety moduł urlRewriting.net jest bardzo stary i dość brzydki. Zachowujemy go tylko dlatego, że niektóre osoby nie mogą zainstalować wtyczki IIR do przepisywania. Zawsze radziłbym używać IIS, jeśli to w ogóle możliwe. – sebastiaan

+1

@sebastiaan Nie wiedziałem o tym - zaktualizuję odpowiedź. Dzięki. – PTuckley

0

Też miałem problemy z nieskończonymi przekierowaniami z Umbraco 6.2.4. Działo się to przypadkowo co tydzień. Moja witryna to wszystko SSL, z UmbracoUseSSL = false.

Moja HTTP na HTTPS zasad był następujący:

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

I zaktualizowane do następujących za @sebastiaan

<rule name="Redirect to https" stopProcessing="true"> 
<match url="(.*)" /> 
<conditions> 
    <add input="{HTTPS}" pattern="off" ignoreCase="true" /> 
</conditions> 
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" 
     redirectType="Permanent" appendQueryString="false" /> 

Brzmi od R: 1 puszka zawiera pusty łańcuch, który może wywołać pętle.{REQUEST_URI} zawsze zawiera co najmniej jeden ukośnik. Nie jestem pewien, czy właśnie dlatego @sebastiaan poleca to drugie?

Jeśli problem będzie się powtarzał, odpowiem. Mam nadzieję, że zaktualizowana reguła rozwiąże problem.

Powiązane problemy