web.config 中带有尾部斜杠的非 www 301 重定向(单一重定向)

non-www with trailing slash 301 redirect in web.config (Single Redirect)

我怎样才能 301 将我的 URL 重定向到最后的 non-www equivalent with trailing slash 而只有一个 单个 301 重定向 (避免重定向链)?我正在使用 ASP.net 4.5/C#/Web 项目,我的路由在 RouteConfig.cs.

中注册

一个选项是检查每个页面的代码隐藏中的 URL 并重建 URL,但我更喜欢让 IIS 使用重写规则来处理它。

正如您从这张图片中看到的(通过 chrome,客户端),有两个 301 重定向,因为在我的 web.config 中我有两个规则,一个用于更改为小写 URL 第二个添加尾部斜杠。

也许 IIS 中有一个选项可以防止重定向,直到所有 URL 在内部重写 运行。我搜索了一下,还没找到解决方法。

在web.config中(您需要安装IIS URL重写模块)

   <system.webServer>
        <rewrite>
            <rules>
                <rule name="noslash" patternSyntax="ECMAScript" stopProcessing="true">
                    <match url=".+[^\/]$" />
                    <conditions logicalGrouping="MatchAny">
                        <add input="{HTTP_HOST}" pattern="www.yourdomain.com" />
                        <add input="{HTTP_HOST}" pattern="yourdomain.com" />
                    </conditions>
                    <action type="Redirect" url="http://yourdomain.com/{R:0}/" />
                </rule>
                <rule name="www" patternSyntax="ECMAScript" stopProcessing="true">
                    <match url=".+\/$" />
                    <conditions logicalGrouping="MatchAny">
                        <add input="{HTTP_HOST}" pattern="www.yourdomain.com" />
                    </conditions>
                    <action type="Redirect" url="http://yourdomain.com/{R:0}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>

EDIT2:如果 url 不存在

,则在末尾添加尾部斜线