Правила IIS ARR не работают должным образом при добавлении косых черт в мои приложения
У меня есть пул приложений, которые я хочу запускать на сервере ARR, который должен служить маршрутизатором для всех моих приложений. Я определил набор правил, которые должны применяться в водопаде, но что-то не работает должным образом.
Первое правило должно обрабатывать завершающие косые черты, другие правила должны отображать мои приложения для разрешения для моего внутреннего DNS-сервера с перезаписываемым URL, но проблема, кажется, возникает во время первого правила.
Поведение по умолчанию состоит в том, что, если я пытаюсь запустить свое приложение с http://myapp/, вернет код 404, если я попытаюсь запустить его, добавив косую черту ( http://www.myapp/), все работает нормально. Поэтому в основном мое правило должно проверять шаблоны URL без косой черты: если ресурс является каталогом, он должен добавлять косую черту в конце URL.
Таким образом, шаблон для перехвата URL является следующим регулярным выражением:
.*[^/]$
Это должно поймать URL без / в конце, и я успешно проверил его.
Для каждого URL, который соответствует регулярному выражению, я должен проверить, является ли он каталогом, и в случае, если я должен установить косую черту, так:
{REQUEST_FILE} -> Is a directory
Но это не работает. Я также попытался добавить следующее правило безуспешно:
{REQUEST_FILE} -> Is not a file
Правило применения следующее:
Перенаправление на (перезапись приводит к тому же поведению):
{R:O}/
Кажется, я не добавляю / к моим URL, и я не знаю, как проверить, какие шаги не увенчались успехом. Следующие правила в основном следуют этой схеме:
mywebapp/* redirect to www.mydnsappaddress/{R:1}
РЕДАКТИРОВАТЬ: я добавляю образец web.config, чтобы показать вам текстовую версию правил.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<clear />
<rule name="Trailing Slash" enabled="false" stopProcessing="true">
<match url=".*[^/]$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{REQUEST_FILENAME}" matchType="IsFile" />
</conditions>
<action type="Redirect" url="{R:0}/" />
</rule>
<rule name="app1" enabled="false" patternSyntax="Wildcard">
<match url="sites/doc/*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
<action type="Rewrite" url="http://mypersonaldnsaddress/{R:0}" />
</rule>
<rule name="ASTCO portale NWS" enabled="true" patternSyntax="Wildcard">
<match url="portale/*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
<action type="Rewrite" url="http://mypersonaldnsaddress/{R:0/{R:0}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
1 ответ
Я должен спросить очевидное: умышленно ли ваш пример enabled
установлен в false
?
Я смог сделать эту работу именно так, как вы хотите: если каталог существует, добавьте косую черту в конце, если нет, не делайте.
<rule name="Trailing Slash" enabled="true" stopProcessing="true">
<match url=".*[^/]$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" />
</conditions>
<action type="Redirect" url="{R:0}/" />
</rule>