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

标签 regex iis web-applications rewrite arr

我有一个应用程序池,我想在 ARR 服务器下运行这些应用程序,该服务器应该充当我所有应用程序的路由器。
我已经定义了一套应该在瀑布中应用的规则,但是有些东西没有以正确的方式工作。

第一条规则应该处理尾部斜杠,其他规则应该映射我的应用程序以使用重写 URL 为我的内部 DNS 服务器解析,但问题似乎发生在第一条规则期间。

默认行为是,如果我尝试使用 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>

最佳答案

我不得不问一个明显的问题:你的例子是不是故意有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>

关于regex - IIS ARR 规则在向我的应用程序添加尾部斜杠时未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29693323/

相关文章:

asp.net - IIS 6网站下具体应用使用https

java - -web 应用程序的 javaagent 选项参数

java - 如何使用 Struts 2 确定页面生成时间?

php - 用正则表达式匹配逗号后跟换行符

javascript - 如何根据它是 Node.JS 中的 $regex 还是 $text 对 Mongoose 结果进行排序?

regex - 这个 perl 脚本片段在做什么?

javascript - 为什么 JavaScript 中的正则表达式返回未定义?

c# - 自定义错误页面未在 IIS7 ASP.NET 上显示

javascript - 服务器上的 JS 和 CSS 文件链接问题 - Slick Slider

java - HttpServletRequest 重用