/ 中存储网

Apache rewrite伪静态中带中文的情况

2014-04-06 16:40:01 来源:kejihao
原来网站在IIS 上面挂着,由于空间不稳定,所以转到 linux上面来。

由于linux 上面不认中文目录。所以采用重定向的方式来改变路径,这下有问题了。

下面是.htaccess重写规则

RewriteEngine on

RewriteBase /

RewriteRule ^帮助中心(.*)$ /help$1 [L,R=301]

RewriteRule ^程序外包(.*)$ /soft$1 [L,R=301]

RewriteRule ^仿站建设(.*)$ /fangzhan$1 [L,R=301]

RewriteRule ^付款方式(.*)$ /pay$1 [L,R=301]

RewriteRule ^公司新闻(.*)$ /news$1 [L,R=301]

RewriteRule ^公司业务(.*)$ /business$1 [L,R=301]

RewriteRule ^管理软件(.*)$ /oasoft$1 [L,R=301]

RewriteRule ^合同下载(.*)$ /htxz$1 [L,R=301]

RewriteRule ^技术文档(.*)$ /code$1 [L,R=301]

RewriteRule ^技术文档/使用技巧(.*)$ /code/jq$1 [L,R=301]

RewriteRule ^加盟合作(.*)$ /jmhz$1 [L,R=301]

RewriteRule ^联系我们(.*)$ /lx$1 [L,R=301]

RewriteRule ^模板开发(.*)$ /template$1 [L,R=301]

RewriteRule ^网站安装(.*)$ /setup$1 [L,R=301]

RewriteRule ^网站公告(.*)$ /g$1 [L,R=301]

RewriteRule ^网站优化(.*)$ /seo$1 [L,R=301]

RewriteRule ^招聘英才(.*)$ /job$1 [L,R=301]

这样输入 http://www.server110.com/技术文档/ 会自动转到 http://www.server110.com/code/ IE 6 Firefox 都支持。

在百度中搜索原来网站收录的页面 site:www.server110.com

点其中一个发现不能打开。

右击查看源码,http://www.server110.com/%BC%BC%CA%F5%CE%C4%B5%B5/java/184.html

而google 中是:

http://www.server110.com/%E6%8A%80%E6%9C%AF%E6%96%87%E6%A1%A3/java/53.html

很明显百度中是gbk 编码 而 google 中是utf-8编码

这下重写规则就有了问题,来自google的可以正确被转向,而百度的会报404找不到页面,考虑到本站流量多来自百度。就不能这样设置。

RewriteRule 还有一个选项目是 NE 表示不对url进行解码

RewriteRule ^技术文档(.*)$ /code$1 [L,R=301,NE]

这样写百度就能打开并转向到新页面。

最后解决方法是这样的,先生成的中文html全部用ftp 传到服务器上,保证百度原来的链接都可以正常打开。

重写模式,以标准的utf-8方式设置,让百度自己去抓吧,等百度把页面变回来,我在把这些文件删除。

以后最好不要用中文URL 除非你在windows下面用。