apache内容协商

一、作用

用来根据不同的请求头信息返回一个页面或资源相对应的不同版本。

二、方式

有两种方式:类型映射文件、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文件,利用资源名+头信息可以获取特定文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值