我想从“ /”到“”的所有请求中删除尾部斜杠,即使它是目录。例如:
我想将其重定向到“ http://bleh.local/sign-in”
Web.config:
<rule name="RemoveTrailingSlashRule1" enabled="true" stopProcessing="true">
<match url="(.*)/$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Redirect" url="{R:1}" />
</rule>
applicationHost.config:
<sectionGroup name="rewrite">
<section name="globalRules" overrideModeDefault="Allow" allowDefinition="AppHostOnly" />
<section name="rules" overrideModeDefault="Allow" />
<section name="outboundRules" overrideModeDefault="Allow" />
<section name="providers" overrideModeDefault="Allow" />
<section name="rewriteMaps" overrideModeDefault="Allow" />
<section name="allowedServerVariables" overrideModeDefault="Allow" />
</sectionGroup>
使用此设置,我得到了无限重定向,因为我从原始设置中删除了此指令:
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
有什么想法吗?
注意:How can I configure IIS to serve directories without trailing slashes and always serve relative to root path?不能解决我的问题。反斜杠被一致地添加。
答案 0 :(得分:0)
这是因为IIS中的<defaultDocument>
。
<defaultDocument>
规则,如果未找到文件,该规则将强制页面以尾部斜杠重定向到url。 domain/sign-in/
<rule name="RemoveTrailingSlashRule1" enabled="true" stopProcessing="true">
<match url="(.*)/$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Redirect" url="{R:1}" />
</rule>
现在,此规则将url加上斜杠(并匹配目录),然后重定向到没有斜杠的url。 domain/sign-in
会创建一个循环。
解决方案是添加规则<defaultDocument enabled="false"></defaultDocument>
。
https://docs.microsoft.com/en-us/iis/configuration/system.webserver/defaultdocument/