mancha 发表于 2015-8-12 09:48:49

多一个“点”给IIS与ASP.NET带来的问题

  【IIS】
  一个网站如果用的是IIS(假设没有在前端7层负载均衡中对这种场景进行特殊处理),只要在浏览器地址栏中输入这个网站的域名并加上“.”,比如:www.iyunv.com. ,就会引发“Bad Request - Invalid Hostname”错误:

  由于这个错误信息是IIS底层直接返回的,如果只从IIS的角度,你没有任何方法可以对这个错误信息进行定制与处理,包括微软自己。

  要解决这个问题,只能在IIS前端加上非基于IIS的7层负载均衡(或反向代理),比如Nginx、Tengine,然后针对这个场景对主机名进行重写或者重定向、显示自定义错误信息。
  我们目前虽然用了基于Tengine的7层负载均衡(阿里云SLB),但是SLB并没有提供针对这个问题的解决方案,所以只能束手无策。
  【ASP.NET】
  如果一个网站用的是ASP.NET(假设没有对以“.”结尾的URL进行重写),只要在一个URL之后加上“.”,ASP.NET中所有的自定义错误设置都形同虚设。

  微软msdn博客站点也有这个问题:

  要解决这个问题,需要借助IIS的URL重写组件(比如Url Rewrite Module)针对这种情况进行URL重写。
  而我们用Url Rewrite Module解决这个问题的过程中发现竟然只能Rewrite,不能Redirect,

  如果Action type改为Redirect,依然会显示之前的错误页面。
  这两个历史悠久的问题更让我们对ASP.NET vNext多了一份期待。
  【更新】
  之前写的URL重写规则不能处理以多个点结局的情况,改进后的重写规则如下:



<rule name="end_with_dot" stopProcessing="true">
<match url="(.*)[^.]\.+$" />
<action type="Rewrite" url="{R:1}" />
</rule>
页: [1]
查看完整版本: 多一个“点”给IIS与ASP.NET带来的问题