一般问题:

我们的 IIS Web 服务器的 URL 格式如下:

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

我们还看到类似这样的网址正在传入:

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

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

我不确定这是否是一个需要像 url 重写模块之类的东西来解决的问题,或者是否有配置设置。

有帮助吗?

解决方案

我认为问题出在 IE 而不是 IIS。

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

您需要做的是将浏览器从 http://www.server.com//page.aspxhttp://www.server.com/page.aspx 用一个 301 HTTP 响应码.

理论上:

由于您似乎正在使用 ASP.NET,因此最透明的方法是编写一个 Http模块 检查请求的 URI 中是否有双斜杠并执行重定向。

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

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

实践中:

可能是 IIS 或 ASP.NET 在您有机会看到双“/”之前就将其吞掉了。如果是 IIS,那么您可能必须在 IIS 前面使用代理。如果是 ASP.NET 那么你也许可以找到一个 ISAPI扩展 这将为你完成这项工作。

其他选项

你可以

  • 拆分页面,以便大多数单独的资源可以与 html 内容分开缓存
  • 教育用户他们不需要添加额外的斜杠。

其他提示

修复链接!

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top