我有一个应用程序池,我想在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}/
似乎没有添加/到我的网址,我不知道如何检查哪些步骤未能成功。接下来的规则基本上遵循这种模式:
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>
答案 0 :(得分:0)
我必须明白:您的示例是否故意将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>