例1:
例2:
注:只要是非 IIS Web服务器都可以,IIS6和II7提示不一样,但都是“Bad Request”,分析了一下,带“点”的请求其实就没有到IIS就出错了,在http.sys获取时就会判断URL存在问题。
现在想解决在出错时转向指定404页面,或者提供思路。
目前我所发现只要在iis里托管的网站都有这个问题,包括微软等。www.360buy.com.可以,那是因为它IIS前面有其它web服务器做的负载均衡。
PS:IIS6可以解决这个问题,比如“http://www.hujiang.com./”、“http://www.maiduo.com./”。但是“http://yeshj.com./“...不可以,但又是”http://maiduo.com./“可以,只不过出错了。
有三个地方提到这个问题:
Microsoft connenct: Trailing dot in FQDN causing "Bad Request - Invalid Hostname"
Stackoverflow: How do I allow trailing dot in host headers in IIS
iis.net: Trailing dot in FQDN causing "Bad Request - Invalid Hostname"
谢谢
@Astar: http://kb.cnblogs.com./ 可以访问,用了CDN加速。
@dudu: CDN去服务器拿的时候应该就没有这个点了。
@dudu: http.sys 不知道是否能扩展,之前找了两篇,但没用:
@dudu: 会记录日志的,配置在这里,默认目录”%SystemRoot%\System32\LogFiles“,捕获了一个格式”2011-12-01 18:15:26 192.168.16.24 8528 192.168.4.20 80 HTTP/1.1 GET / 400 - Hostname -“
@Astar: C:\Windows\System32\LogFiles\HTTPERR\httperr1.log
@Astar: 嗯, 我也看到这个日志了。
@Astar: 在注册表中设置AllowRestrictedChars为1,也解决不了问题。
可能是在末尾加“.”,Web服务器认为这个地址不正确,还没有书写完全,你如果输入其他的字母,就报不一样的错了。
在想要跳转的语句上写判断,如果出错了就自动跳到404页面去,404页面可以自己定义把。
域名解析就是这样的:将主机名www做CName记录指向您的三级域名地址 ,以"."结尾;
将空主机名做A记录指向您的IP地址
将空主机名做MX记录指向您的mail地址,以"."结尾
你理解错了,如果IIS7中安装UrlScan,那么UrlScan默认会禁用在Url出现点(.),在UrlScan.ini中设置AllowDotInPath=1即可
@上不了岸的鱼: 谢谢!
在web.config配置中加上下面的试试:
<system.webServer>
<httpErrors errorMode="Custom">
<error statusCode="400" subStatusCode="-1" path="_path" responseMode="Redirect"/>
</httpErrors>
</system.webServer>
IIS和web.config设置都没有用
如果我根本没有装“UrlScan”呢,我试试。
@Astar:
有没有可能在IIS中把带点的域名重写会正常的域名?
@上不了岸的鱼: 不可能,IIS都捕获不到这个东西就已经出错了,你可以用"Fiddler"看一下,正常的IIS返回“Server: Microsoft-IIS/7.5”而加点的是“Server: Microsoft-HTTPAPI/2.0”。