Почему перезаписи URL-адресов в виртуальном каталоге веб-приложения Azure не обрабатываются, если корневой каталог содержит перезаписи?

У меня есть два виртуальных каталога в веб-приложении Azure, и я подтвердил, что они правильно работают как каталоги приложений.

Корень веб-приложения не содержит ничего, кроме файла web.config с двумя правилами перезаписи, которые заставляют поддомены указывать на такие подпапки:

<rule name="App1 Subdomain Redirect to SubFolder">
    <match url=".*" />
    <conditions>
        <add input="{HTTP_HOST}" pattern="^app1.myservice\.net$" />
    </conditions>
    <action type="Rewrite" url="/app1/{R:0}" />
</rule>   

<rule name="App2 Subdomain Redirect to SubFolder">
    <match url=".*" />
    <conditions>
        <add input="{HTTP_HOST}" pattern="^app2.myservice\.net$" />
    </conditions>
    <action type="Rewrite" url="/app2/{R:0}" />
</rule>

(Я понимаю, что это можно было бы написать более эффективно - я пытаюсь удалить как можно больше переменных.)

В каждом из виртуальных каталогов у меня есть еще один файл web.config, содержащий одно правило для добавления расширения:

<rule name="Add Extension">
    <match url=".*" negate="false" />
    <conditions>
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
        <add input="{URL}" pattern="(.*)\.(.*)" negate="true" />
    </conditions>
    <action type="Rewrite" url="{R:0}.ashx" />
</rule>

Проблема, с которой я столкнулся, заключается в том, что правило «Добавить расширение» никогда не обрабатывается.

Если я удалю правило из файла конфигурации виртуального каталога и помещу его в корневой каталог, все будет хорошо. (Если я делаю это только для одного виртуального каталога, он отлично работает для этого каталога, а другой - нет. Если я сделаю это для обоих, тогда все правила будут обработаны.)

Если я удалю правило «Добавить расширение» и попробую другие правила, другие правила не будут обработаны, что указывает мне, что это не проблема, специфическая для этого конкретного правила.

Если я удалю все правила из конфигурации root, все правила в виртуальных каталогах будут обработаны.

У меня вопрос: сталкивался ли кто-нибудь еще с этим и что они сделали в качестве временного решения?

Насколько я понимаю, правила должны передаваться из корневого каталога в виртуальный так же, как и другие параметры конфигурации.

Поиски не помогли.

Ананд, похоже, столкнулся с той же проблемой на сайте, отличном от Azure IIS, но ответа предложено не было: http://forums.iis.net/t/1178488.aspx

Вопрос Zielu1 в чем-то похож, но снова не получил ответа: IIS Перезапись URL в дочернем виртуальном каталоге без перенаправления

Есть много других вопросов о перезаписи, в основном о синтаксисе и о том, как заставить их работать в целом, но мало о наследовании правил виртуальным каталогом.

Спасибо за помощь.


person John Clegg    schedule 08.10.2015    source источник


Ответы (1)


Попробуйте сопоставить полные пути подкаталогов

<rule name="Add Extension">
    <match url="/MySubDirectory/.*" negate="false" />
    <conditions>
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
        <add input="{URL}" pattern="(.*)\.(.*)" negate="true" />
    </conditions>
    <action type="Rewrite" url="{R:0}.ashx" />
</rule>
person JuanK    schedule 08.10.2015
comment
Хуан, я попробовал ваше предложение в конфигурации виртуальной папки, и оно не сработало. Чтобы убедиться, что я набрал правильно, я поместил его в конфигурацию корневой папки, и он сработал. - person John Clegg; 09.10.2015