如何使用IIS重定向URL中的额外正斜杠

时间:2013-04-16 23:29:28

标签: asp.net iis redirect

这个问题最适用于例子。

说我的网络应用程序托管在http://example.com/WebApp/

According to Microsoft,如果缺少前瞻性斜杠,IIS将重定向。这可以按预期工作:发送到http://example.com/WebApp的请求会重定向到http://example.com/WebApp/

现在,在我的情况下,有人使用额外正斜杠为该网址添加了书签:http://example.com/WebApp//。这将按预期加载Web应用程序,但现在所有相对URL都是错误的。因此,如果我在同一个域上调用另一个应用,例如../AnotherApp/SomePage.aspx,那么它会尝试加载/WebApp/AnotherApp/SomePage.aspx,而不是正确加载/AnotherApp/SomePage.aspx

如何将http://example.com/WebApp//重定向到http://example.com/WebApp/

2 个答案:

答案 0 :(得分:1)

单独使用服务器端脚本似乎很难做到这一点。也许在JavaScript中进行重定向就足够了?

<html>
<head>
<script type="text/javascript">
(function () {
    var protocol = location.href.substr(0, location.href.indexOf("://"));
    var restOfUrl = location.href.substr(location.href.indexOf("://") + "://".length);
    if (restOfUrl.match(/\/\//)) {
        location.href = protocol + "://" + restOfUrl.replace(/\/\//g, "/");
    }
})();
</script>
</head>
<body>
...
</body>
</html>

此外,您应该考虑在您的网页中设置canonical link,以便搜索引擎正确记录内容。

答案 1 :(得分:0)

您可以将IIS重写模块(http://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference#Rule_Pattern)与重定向重定向到单斜杠版本的正则表达式一起使用。

例如,您可以将URL与此正则表达式的额外斜杠匹配:

http://.*/{2,}