Voorwaardelijke URL Rewrites
In IIS kan je met behulp van rewrites de aanvragen naar je site omleiden of aanpassen. Deze rewrites wil je vaak niet altijd toepassen, maar voorwaardelijk. Hiervoor kan je condities gebruiken. Bij het instellen van een rewrite kan je onder het kopje 'Conditions' deze invullen. Hier vul je een input in en een testwaarde, die je vergelijkt en kijkt of ze juist wel of niet overeenkomen.
Waar je rewrites bijvoorbeeld voor kan gebruiken, is het toevoegen van de Access-Control-Allow-Origin-header. Met deze header geef je aan dat een website met een ander domein gebruik kan maken van je resources. Deze header kan echter alleen of een wildcard bevatten of een specifiek domein. De header is dus:
1. Access-Control-Allow-Origin: *
2. Access-Control-Allow-Origin: https://sigmasolutions.nl
De wildcard zorgt ervoor dat aanvragen vanuit alle websites gedaan mogen worden en dat is iets wat je niet wilt hebben. Het kan wel voorkomen dat je meerdere websites hebt die gebruik willen maken van een bepaald script. Bijvoorbeeld https://sigmasolutions.nl en https://sigmasolutions.eu.
Je kan behalve * geen wildcards gebruiken, dus zal je rewrites moeten gebruiken om ervoor te zorgen dat als de origin van een verzoek één van deze websites is, de Allow-Origin-header betreffende origin is.
Dit doe je door een outbound rule te maken met betreffende domeinen in de voorwaarde. Je kan 1 voorwaarde maken, maar waarschijnlijk is het overzichtelijker om er 2 te maken, één per domein.
Als input geef je op {HTTP_ORIGIN} en als pattern (https://sigmasolutions\.nl).
Je kan dit testen door op 'Test pattern...' te klikken en als pattern op te geven https://sigmasolutions.nl, wat zou moeten werken, en iets anders, wat niet zou moeten werken.
Grouping
Nu kan je er nog een maken voor https://sigmasolutions.eu. In dat geval zal je echter moeten letten op twee zaken. Ten eerst de logical grouping: moet een verzoek voldoen aan ALLE (Match All) voorwaarden of EEN VAN (Match Any). Als een verzoek moet voldoen aan alle voorwaarden, dan zal bovenstaande voorbeeld niet werken. Immers, een origin is niet én https://sigmasolutions.nl én https://sigmasolutions.eu.
De gematchde conditie zal in de variable {C:X} wrden gezet, waarbij X een nummer is. Je kan zien welk nummer als je een conditie test. Als je meerdere condities hebt, dan wordt dat nummer bij elke nieuwe conditie op 0 gezet, tenzij je 'Track capture groups across conditions' aanzet. In dat geval verwacht je de origin in {C:0}, terwijl-ie in {C:2} zit, in het voorbeeld. Zorg er dus voor dat dit vinkje uit staat, tenzij het nodig is.
Let ook op de volgorde van je condities. Sommige waardes die worden opgegeven, worden door meerdere patterns opgepakt. Als je 'Match Any' aan hebt staan, dan zullen de captures van de eerste conditie in het rijtje worden gebruikt.
Nu kan je {C:0} (of een ander cijfer als dat zo is ingesteld) gebruiken bij je Action, om de waarde Access-Control-Allow-Origin dynamisch terug te geven.