Правила 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>
Другие вопросы по тегам