最近测试一个游戏项目的资源文件,发现一个apache忽略文件后缀导致的问题

 
可以访问 http://10.0.0.18/logXML/ini78
可以访问 http://10.0.0.18/logXML/ini78.xml
 
不能访问 http://10.0.0.16/logXML/ini78
可以访问 http://10.0.0.16/logXML/ini78.xml
 
经过查找发现是这个 Options Indexes FollowSymLinks MultiViews 导致的
 
Multiviews
MultiViews是一个针对每个目录的选项,也就是说可以在httpd.conf或.htaccess(如果正确设置了AllowOverride)文件中的<Directory>、<Location>、<Files>配置段中,用Options指令来指定。注意,Options All 并不会设置MultiViews ,你必须明确地指定。
 
MultiViews的效果是:如果服务器收到对/some/dir/foo的请求,而/some/dir/foo并不存在,但是如果/some/dir启用了MultiViews ,则服务器会查找这个目录下所有的foo.* 文件,并有效地伪造一个说明这些foo.* 文件的类型表,分配给他们相同的媒体类型及内容编码,并选择其中最合适的匹配返回给客户。
 
MultiViews还可以在服务器检索一个目录时,用于DirectoryIndex指令搜索的文件名。如果设置了:
 
DirectoryIndex index
而index.html和index.html3并存,则服务器会作一个权衡;如果都没有,但是有index.cgi ,则服务器会执行它。
 
如果一个目录中没有任何文件具有mod_mime可以识别的表示其字符集、内容类型、语言和编码的后缀,那么其结果将取决于MultiViewsMatch指令的设置,这个指令决定了在MultiViews协商中将使用的处理器、过滤器和其他后缀类型。