5

这个问题最适合用例子。

假设我的网络应用托管在http://example.com/WebApp/

根据 Microsoft的说法,如果缺少尾部正斜杠,IIS 将重定向。这按预期工作:发送到的请求http://example.com/WebApp被重定向到http://example.com/WebApp/.

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

我怎样才能重定向http://example.com/WebApp//http://example.com/WebApp/

4

2 回答 2

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>

此外,您应该考虑在页面中设置规范链接,以便搜索引擎正确索引内容。

于 2013-04-17T16:43:25.157 回答
0

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

例如,您可以使用此正则表达式匹配带有额外斜杠的 URL:

http://.*/{2,}

于 2013-04-17T16:08:27.173 回答