这个问题最适用于例子。
说我的网络应用程序托管在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/
?
答案 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,}