Я смог заставить это работать.
Первым препятствием было то, что я не осознавал, что не все типы условных совпадений доступны в глобальной области (именно там я и писал свои правила). Только Pattern
было доступно. Мне пришлось изменить область на «распределенную» область (правила для сайта), чтобы получить доступ к типам IsFile
и IsDirectory
соответствию.
Тогда я мог бы написать свои правила с какой-то иерархией. Сначала переписать, чтобы соответствовать шаблону, который я хочу попробовать сначала, затем, если он не разрешается в файл, переписать его на следующий шаблон и повторить.
<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>
В моем конкретном случае я хотел сначала попробовать конкретный подкаталог, а затем попробовать родительские каталоги, если они не существуют. Но теоретически я мог бы сделать это для любого набора путей, если я знаю, в каком порядке их пробовать.
Так что для моего примера в вопросе я бы установил эти правила:
<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>