2013-09-21 21 views
6

Se sto utilizzando httpRedirect e rewrite nel mio file Web.config, come posso specificare quale regola ha la precedenza?Priorità regola di reindirizzamento IIS

Ad esempio, supponiamo di avere una regola generale di catch come wildcard="*", ma che abbia anche un wildcard="/news" destination="/new/news", sembra che venga eseguita solo la regola wildcard="*".

È possibile ottenere tale comportamento da Apache; Immagino ci deve essere un modo in IIS.

risposta

7

La precedenza è la stessa dell'ordine in cui sono specificati. IIS Manager ha un pulsante "Sposta su" e "Sposta giù" che li riordina per te.

Ad esempio:

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

consideri una richiesta in ingresso per /foo?bar=123.

In questo esempio, poiché Rule1 è prima, significa che la richiesta verrà riscritto per foo.aspx?bar=special anziché foo.aspx?bar=123, anche se corrisponde simultaneamente Rule1, Rule2 e Rule3.

L'attributo stopProcessing="true" assicura che non vengano eseguite altre regole di corrispondenza (ad esempio Rule2 e Rule3).

Fonte: http://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference#Rules_Evaluation

Ogni livello di configurazione in IIS può avere zero o più regole di riscrittura definite. Le regole vengono valutate nello stesso ordine in cui sono specificate. Il modulo di riscrittura degli URL elabora il set di regole utilizzando il seguente algoritmo:

  1. Innanzitutto, l'URL viene confrontato con lo schema di una regola. Se non corrisponde, il modulo di riscrittura degli URL interrompe immediatamente l'elaborazione di tale regola e passa alla regola successiva.
  2. Se un modello corrisponde e non ci sono condizioni per la regola, il modulo di riscrittura degli URL esegue l'azione specificata per questa regola e quindi passa alla regola successiva, in cui utilizza l'URL sostituito come input per quella regola.
  3. Se un modello corrisponde e vi sono condizioni per la regola, il Modulo di riscrittura degli URL valuta le condizioni. Se la valutazione ha esito positivo, viene eseguita l'azione della regola specificato, quindi l'URL riscritto viene utilizzato come input per la successiva regola
+0

potrebbe spiegare questo nel contesto del file web.config? non so nulla della gui. – tau

+1

@tau Ho aggiornato la mia risposta. – Dai

+0

grazie mille! Proverò questo al più presto. – tau

Problemi correlati