2013-09-21 25 views
6

Jeśli używam httpRedirect i rewrite w moim pliku Web.config, jak mogę określić, która reguła ma pierwszeństwo?Priorytet przekierowania IIS:

Na przykład, załóżmy, że mam ogólną regułę catch all, taką jak wildcard="*", ale mam także wildcard="/news" destination="/new/news", wydaje się, że wykonywana jest tylko reguła wildcard="*".

Można uzyskać takie zachowanie od Apache; Wyobrażam sobie, że musi być jakiś sposób w IIS.

Odpowiedz

7

Pierwszeństwo jest takie samo jak kolejność, w jakiej zostały określone. Menedżer usług IIS ma przycisk "Przenieś w górę" i "Przenieś w dół", który ponownie je zamówi.

Na przykład:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
<system.webServer> 
<rewrite> 
    <rules> 
     <rule name="Rule1" stopProcessing="true"> 
      <match url="^foo/?bar=123"/> 
      <action type="Rewrite" url="foo.aspx?bar=special" appendQueryString="false" /> 
     </rule> 
     <rule name="Rule2" stopProcessing="true"> 
      <match url="^foo/?bar=([A-z0-9]+)"/> 
      <action type="Rewrite" url="foo.aspx?bar={R:1}" appendQueryString="false" /> 
     </rule> 
     <rule name="Rule3" stopProcessing="true"> 
      <match url="^foo/"/> 
      <action type="Rewrite" url="somethingElse.aspx" appendQueryString="false" /> 
     </rule> 
    </rules> 
</rewrite> 
</system.webServer> 
</configuration> 

Rozważmy przychodzące żądanie /foo?bar=123.

W tym przykładzie, ponieważ Rule1 jest pierwszym, oznacza to, że wniosek zostanie przepisana do foo.aspx?bar=special zamiast foo.aspx?bar=123, choć jednocześnie dopasowuje Rule1, Rule2 i Rule3.

Atrybut stopProcessing="true" zapewnia, że ​​inne reguły dopasowania nie są wykonywane (tj. Rule2 i Rule3).

Źródło: http://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference#Rules_Evaluation

Każdy poziom konfiguracji IIS może mieć zero lub więcej reguł przepisywania określonych. Reguły są oceniane w tej samej kolejności, w jakiej zostały określone: ​​. URL Rewrite Moduł przetwarza zbiór zasad za pomocą następującego algorytmu:

  1. pierwsze, URL jest dopasowany do wzorca przepisu. Jeśli nie pasuje, moduł URL Rewrite natychmiast przerywa przetwarzanie tej reguły i przechodzi do następnej reguły.
  2. Jeśli wzór jest zgodny i nie ma warunków dla reguły, moduł URL Rewrite wykonuje działanie określone dla tej reguły, a następnie przechodzi do następnej reguły, w której używa podstawionego adresu URL jako danych wejściowych dla tej reguły.
  3. Jeśli wzór jest zgodny i istnieją warunki dla reguły, moduł URL Rewrite ocenia warunki. Jeżeli ocena jest udane, zasada określona czynność jest wykonywana, a następnie przepisywane URL służy jako wejście do kolejnej reguły
+0

można to wyjaśnić w kontekście pliku web.config? Nic nie wiem o gui. – tau

+1

@tau Zaktualizowałem swoją odpowiedź. – Dai

+0

dziękuję bardzo! spróbuję to jak najszybciej. – tau