一、作用
用来根据不同的请求头信息返回一个页面或资源相对应的不同版本。
二、方式
有两种方式:类型映射文件、multiview命令
1. type-map文件
添加type-map文件处理器
AddHandler type-map .var #即所有扩展名var文件会有type-map进行解析
var 文件格式如:
URI: foo #这一行说没啥用,但都这么写
#不同版本间用空行进行间隔
URI: foo.en.html #此版本对应文件的路径,说是相对路径(没验证)
Content-type: text/html #对应版本的头信息
Content-language: en #意思这个是英文版的
URI: foo.fr.de.html #同上。。。。
Content-type: text/html;
Content-language: ch #这个字段瞎写也行,只要请求头能对上号就行。
- 测试访问localhost/foo.html,返回foo.html信息;
- 更改请求头accept-language为en,结果依然是foo.html,并不能通过改变请求头获取对应版本。
- 测试访问localhost/foo,不加扩展名,结果404,更改请求头也一样。
- 测试访问localhost/foo.var(即类型映射文件),可以返回foo的某一版本页面;更改请求头accept-language为en、ch能得到对应版本页面;改为chs(未定义的头)返回一个406响应和版本列表页面,与文档描述的一致。
综上,如果不是没发现,那就是只能通过访问对应类型映射文件,通过变更头信息来达到多版本效果。
2. MultiViews命令
此命令按目录产生资源多版本效果,如访问localhost/test 时,目录中存在多个名为test但扩展名不同的文件时:
- 如果请求头accept为text/html时,则会返回test.html;
- 请求头为错误头时accept为a/b,返回406和一个可选文件列表页;(发现自己瞎写了很多扩展名,但是列表中并没有显示,很是费解。灵光一闪,可能时apache不识别扩展名导致。利用addtype text/html abc def hia 等等,把不显示的扩展名加上,发现此时已可以返回完整列表!)
这个倒是可以不用访问var文件,利用资源名+头信息可以获取特定文件。