是否有IIS设置来摆脱请求的URL中多余的'/'字符?

问题描述:

普遍的问题:是否有IIS设置来摆脱请求的URL中多余的'/'字符?

我们的网址来我们的IIS Web服务器的格式,如:

http://www.server.com/page.aspx

我们也看到,像这样的URL中来:

http://www.server.com//page.aspx

我们希望,因为当用户代理是Internet Explorer,这是解决为2个不同的页面,因此,下载内容的两倍时,就应该从高速缓存来解决摆脱这些额外的路径字符。

我不确定这是否是一个类似url重写模块的问题,或者是否有配置设置。

+0

问题在于它没有说明你在哪里看到这样的请求。我的测试表明这些请求不会到达IIS7日志文件,也不会到达ASP.NET管道。它们被IIS清理为一个斜线。 – 2012-01-24 01:06:30

我认为这个问题是用IE而不是IIS。

Url重写通常是指在服务器上映射URL从http://example/shoes/clarkeshttp://example/shoes.aspx?maker=clarkes的过程,以便浏览器不知道它。

你需要做的是使用301 Http response code将浏览器从http://www.server.com//page.aspx重定向到http://www.server.com/page.aspx

从理论上讲:

正如你似乎可以用ASP.NET,最透明的方式做这将是写一个HttpModule为先检查请求的URI双斜杠并执行重定向。

最简单的方法是在Global.ascx。(cs | vb)中放一些代码来检查请求的BeginRequest的URI。

无论哪种方式,执行检查的代码都是相同的。

在实践:

这可能是IIS或ASP.NET吞了双“/”你能看到它的机会了。如果是IIS,那么您可能必须在IIS前使用代理。 如果它是ASP.NET,那么你可能会找到一个ISAPI Extension,可以为你做这项工作。

其他选项

你既可以

  • 拆分的页面了,这样大部分的个人资源可以从HTML内容分别缓存
  • 教育,他们并不需要用户把额外的斜杠英寸
+0

这个答案对于使用HttpModule是错误的。收到的请求像`GET //// default.aspx`永远不会以这种形式到达ASP.NET。实际上,它永远也不会以这种方式到达IIS日志文件。它被清理为`/ default.aspx`。因此,HttpModule无法解决问题。我没有测试过,如果ISAPI扩展看到原始请求。此外,OP从未指定过什么版本的IIS。我使用.NET 4在IIS7上进行了测试。 – 2012-01-24 01:02:24

修复您的链接!

很可能你会看到双斜杠,因为你在自己的网站上有错误的链接,无论是硬编码还是脚本生成。在连接http://example.com/ + /page.aspx的脚本中错误地执行此操作很容易。密切关注这些类型的连接!

IIS清理掉额外的斜线,因此无法用任何ASP.NET代码或HttpModule解决这个问题。额外的斜线甚至不会将其放入IIS日志文件中。我使用IIS7和telnet进行测试,无法在日志或ASP.NET中获得额外的斜杠。

我不确定为什么原始问题似乎只涉及IE浏览器。 IE和FF都允许在URL中使用额外的斜线,并且似乎可以传输它们,尽管我没有使用数据包嗅探来验证。