nginx同时支持gbk utf-8

何须誓言 发布于 2014/11/10 19:34
阅读 2K+
收藏 0

nginx同时支持gbk utf-8,需要满足

1.可以通过浏览器访问。(默认utf-8)

2.可以通过cmd wget下载。(默认gbk)

加载中
0
抱雪
抱雪
大概只能检查UserAgent了
何须誓言
回复 @抱雪 : 哦 这样能解决wget问题,客户访问的时候 不止wget
抱雪
抱雪
回复 @何须誓言 : 如果你本来就有两个版本的程序的话,在里面做一个URL重写就可以了,如果你希望Nginx给你转码,那我不知道
抱雪
抱雪
回复 @何须誓言 : 我猜想你是发送不同编码的文件名吧,因为内容编码问题不大. 如果检查到UserAgent是 Wget/x.xx 之类的,就发送一个GBK编码后的文件名,这是在编程语言的实现,Nginx本身怎么实现我也不知道 $http_user_agent ~ ^Wget { #这里不知道Nginx怎么弄 }
何须誓言
跟user agent 有什么关系
0
何须誓言

前端nginx反向代理,后端通过apache 实现的GBK utf-8 两种编码分别两个端口

apache实现方式参考页面:http://colinzhouyj.blog.51cto.com/2265679/674351

总觉得这不是最终解决方案,nginx肯定应该自己就支持的啊!

 

0
淡定的wo
淡定的wo

这个需求是怎么回事?暂且不管nginx支持不支持两种编码。

文件的编码始终是固定的,即使wget下载是gbk,访问是utf8. 客户端请求到的文件编码是不可能变的。具体以何种编码显示,是客户端的问题。


何须誓言
服务端会以gbk/utf8/gb2312存放文件 三种格式存储文件名 客户端访问的时候 会以gbk/utf8/gb2312 访问文件名 比如,存放文件名可能是gbk的,访问的文件名是utf8的
0
大大
大大
nginx又不管文件具体是什么编码
0
_eechen
_eechen
通过gbk来节约汉字的1个字节没有意义,除外文学作品,一般的传输中汉字占比都不大,带宽并不是核心因素之一,虽然编程语言在output的时候可以修改内容的编码,但这样做比较混乱、得不偿失
何须誓言
客户这么存,蛋疼
0
何须誓言

重新描述下需求:

服务端会以gbk/utf8/gb2312存放文件 三种格式存储文件名

客户端访问的时候 会以gbk/utf8/gb2312 访问文件名

比如,存放文件名可能是gbk的,访问的文件名时用utf8的url访问

 

0
淡定的wo
淡定的wo
建议的处理方法:
比如,有文件redirect.php,所有请求必须经过此文件处理。
1. redirect.php判断浏览器User-agent
2. 如果是curl wget 之类的工具,User-agent直接会体现出来,此时redirect.php重定向请求到 file.gbk.php

3. 非下载工具访问(浏览器),此时redirect.php重定向请求到 file.utf8.php


这个判断nginx也可以做,但是有其它需求时,nginx不好扩展。

淡定的wo
淡定的wo
回复 @何须誓言 : 你这个需求越来越乱,应该梳理一下。不好实现,或者实现起来困难,应该考虑思路有问题。本身浏览器和下载工具是很好判断的。
何须誓言
回复 @淡定的wo : 根据浏览器还是不好判断的,如果是浏览器,是应该跳转到哪个php? 不是浏览器的gbk/gb2312/utf8都可能,同样,是浏览器这三种编码也都可能
淡定的wo
淡定的wo
回复 @何须誓言 : 只需要确定是不是浏览器正常访问。xshell之类的明显不是浏览器。
何须誓言
这个是一个思路,不过不能彻底解决。只针对了wget curl 这种必须在cmd里使用,wget curl 不是只在cmd里下载的,如果在xshell 等工具里 可能是utf-8/gbk等。 看来只能用apache代理下了
返回顶部
顶部