IIS ARR 规则在向应用程序添加尾部斜杠时未按预期工作

IIS ARR rules not working as expected in adding trailing slashes to my applications

提问人:lateralus 提问时间:4/17/2015 最后编辑:CinCoutlateralus 更新时间:12/18/2021 访问量:998

问:

我有一个应用程序池,我想在 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>
正则表达式 IIS Web 应用程序 URL 重写 ARR

评论

0赞 Markus Jarderot 4/21/2015
您能列出您正在使用的规则,或者至少列出一个示例吗?它们应在 web.config 文件中显示为 XML。
0赞 lateralus 4/21/2015
我把它们添加到了主帖子中。

答:

0赞 Regular Jo 4/25/2015 #1

我不得不问一个显而易见的问题:你的例子是故意设置的吗?enabledfalse

我能够完全按照您的意愿进行这项工作:如果目录存在,则在末尾添加斜杠,如果不存在,则不要。

<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>