Herschrijf regels binnen IIS: Patroon en condities
In mijn vorige blog werden server variabelen besproken. In deze blog zal ik het hebben over:
1. Patroon: Het patroon wordt gebruikt om een reguliere expressie of een wildcard patroon op te geven welke gebruikt wordt om een URL op te matchen.
2. Conditie: Voorwaarden om aanvullende bewerkingen uit te voeren: als een verzoek header X bevat, doe dan Y.
Voor het aanmaken van een herschrijf regel kun je gebruik maken van bestaand templates voor zowel uitgaande als inkomende herschrijf regels. Voor nu zullen we gebruik maken van het template ´Blank rule´ zodat we zelf alles kunnen instellen.
Voor het aanmaken van een regel zijn er 4 onderdelen waarmee je kunt werken:
- Patroon (aan welke eisen met een verzoek voldoen om de regel op toe te passen)
- Conditie (zo kun je een verzoek van een bepaalde host afvangen)
- Server variabelen
- Actie
Regels
Binnen een regel kun je aangeven aan welke voorwaarde een URL moet voldoen of juist niet moet voldoen om de regel op toe te passen. Je kunt hierbinnen gebruik maken van een reguliere expressie, een exacte match of een wildcard. De query string wordt niet meegenomen binnen deze regel, mocht je hier wel op willen checken dan kun je dit doen binnen een conditie.
Een vaak gebruikte reguliere expressie is het volgende patroon: (.*). Dit patroon zal elk teken afvangen dus elke URL zal voldoen aan deze regel. Een ander voorbeeld van een patroon kan zijn: .*\.(gif|jpg|png)$. Hier vang je aanvragen af die een afbeelding aanvragen. Dit ziet er als volgt uit:
Ook kun je binnen IIS je patroon testen om te zien of je patroon inderdaad afvangt wat je wilt afvangen:
Conditie
Een conditie wordt gebruikt om aanvullende condities op te stellen waaraan een verzoek moet voldoen als een URL overeenkomt met het aangeven regelpatroon. Deze condities zullen alleen geëvalueerd worden als een URL voldoet aan het patroon wat in de regel is opgegeven.
Er kunnen meerdere condities worden opgegeven waaraan een verzoek moet voldoen. Het is mogelijk om aan te geven of een verzoek aan alle condities moet voldoen of aan maar één van de condities om verder verwerkt te worden. Bij het opgeven van de conditie kun je de volgende opties gebruiken:
- Conditie input: dit is de waarde wat geëvalueerd gaat worden of de conditie van toepassing is of niet. Dit kan de query string zijn (QUERY_STRING) of de host van het verzoek (HTTP_HOST)
- Match type: hierin geef je de logische voorwaarde op:
- IsFile/IsNotaFile: hier wordt gekeken of de conditie input een pad naar een bestand bevat of juist niet
- IsDirectory/IsNotaDirectory: hier wordt gekeken of de conditie input een pad naar een map bevat of juist niet
- MatchesPatern/DoesNotMatchPatern: hierbinnen wordt de conditie input vergeleken met een regulieren expressie om te bepalen of deze aan de conditie voldoet of juist niet
Binnen een conditie kun je bijvoorbeeld controleren of een verzoek vanuit een bepaalde host afkomstig is:
En ook deze kun je weer testen:
Voor meer informatie over IIS herscrhijfregels: