Ich konnte das zum Laufen bringen.
Die erste Hürde war, dass ich nicht wusste, dass nicht alle bedingten Übereinstimmungsarten im globalen Gültigkeitsbereich verfügbar sind (in dem ich meine Regeln schrieb). Nur Pattern
war vorhanden. Ich musste den Geltungsbereich in den "verteilten" Geltungsbereich (Regeln pro Standort) ändern, um Zugriff auf die IsFile
und IsDirectory
Übereinstimmungstypen zu erhalten.
Von dort aus konnte ich meine Regeln mit einer Art Hierarchie aufschreiben. Zuerst schreiben Sie das Muster nach, das ich zuerst ausprobieren möchte. Wenn es sich nicht in eine Datei auflöst, schreiben Sie es in das nächste Muster und wiederholen Sie es.
<rule name="try in project/content" stopProcessing="false"> <match url=".*" /> <action type="Rewrite" url="project/content/" /> </rule> <rule name="verify project/content" stopProcessing="false"> <match url="(project)/content(/.*)" /> <conditions logicalGrouping="MatchAll"> <add input="" matchType="IsFile" negate="true" /> </conditions> <action type="Rewrite" url="" /> </rule>
In meinem speziellen Fall wollte ich zuerst ein bestimmtes Unterverzeichnis ausprobieren und dann übergeordnete Verzeichnisse ausprobieren, falls diese nicht vorhanden waren. Aber ich könnte dies theoretisch für alle Pfade tun, solange ich weiß, in welcher Reihenfolge ich sie ausprobieren möchte.
Für mein Beispiel in der Frage würde ich folgende Regeln festlegen:
<rule name="try in someproject1" stopProcessing="false"> <match url=".*" /> <action type="Rewrite" url="someproject1/" /> </rule> <rule name="try in someproject2 otherwise" stopProcessing="false"> <match url="someproject1/(.*)" /> <conditions logicalGrouping="MatchAll"> <add input="" matchType="IsFile" negate="true" /> </conditions> <action type="Rewrite" url="someproject2/" /> </rule> <rule name="try in someotherproject otherwise" stopProcessing="false"> <match url="someproject2/(.*)" /> <conditions logicalGrouping="MatchAll"> <add input="" matchType="IsFile" negate="true" /> </conditions> <action type="Rewrite" url="someotherproject/" /> </rule> <rule name="fallback to root otherwise" stopProcessing="false"> <match url="someotherproject/(.*)" /> <conditions logicalGrouping="MatchAll"> <add input="" matchType="IsFile" negate="true" /> </conditions> <action type="Rewrite" url="" /> </rule>