最近网站改版,有很多之前的URL要重新转向到新版本的URL上,而且要一一对应。大家都知道,网站改版时的URL转向一般要用301 Moved Permanently,如果是英文或者数字格式的URL,好办,直接把规则写进.htaccess里面就行了,但是如果URL里含有汉字,全角表点符号怎么办?直接写进去是不能正常工作的。举个例子:
Redirect 301 /(jarfee).html http://localhost/jarfee-sbg-case.html
这个例子里面,要把http://localhost/(jarfee).html用301转向到http://localhost/jarfee-sbg-case.html ,语法都是正确的,但是有可能会不能正常工作,我想,是不是要把全角的()转换成ANSI编码(%A3%A8%A3%A9)呢?然后试了下:
Redirect 301 /%A3%A8jarfee%A3%A9.html http://localhost/jarfee-sbg-case.html
但还是不能正常工作,又想了下是不是要用转义字符(\)把URL里面的(%)转义下?然后试了试:
Redirect 301 /\%A3\%A8jarfee\%A3\%A9.html http://localhost/jarfee-sbg-case.html
事实证明了,不行。
会不会是要把()转成UTF-8编码(%EF%BC%88%EF%BC%89)呢?立即试下:
Redirect 301 /%EF%BC%88jarfee%EF%BC%89.html http://localhost/jarfee-sbg-case.html
不行。。。添加转义字符,还不行:
Redirect 301 /\%EF\%BC\%88jarfee\%EF\%BC\%89.html http://localhost/jarfee-sbg-case.html
绝望了。。。看到我一同学Frank gAo在MSN上,于是请教他,跟他解释了半天,总算明白了我的意思(他对MS IIS比较熟悉)然后怎么修改也不行,最后他说,你把文件保存成unicode格式试下?
另存成unicode编码格式,打开页面:
Internal Server Error
汗了一下, 服务器都 down 了。郁闷。。。
如果保存成 UTF-8呢?因为最开始文件默认的编码是ANSI的,所以UTF-8是最后的机会了。 另存成UTF-8编码格式,打开页面:
301 Moved Permanently Succeed…
成功了~~
后记,一般.htaccess在保存的时候用UTF-8的格式,无论URL里面有什么样的字符,都能顺利跳转了。具体是,用文字编辑器打开.htaccess,然后另存下,在对话框下面的格式选择里,选”UTF-8″就行了。
![Jarfee[加飞]的博客](http://www.jarfee.cn/blog/wp-content/themes/atahualpa/images/logo.png)
[...] Jarfee[加飞]的博客 搜索引擎优化(SEO)心得,体会;魔兽世界(WOW)里面开心的故事;还有感悟,感觉,感慨和感想。 « Apache Rewrite:URL中含有汉字和全角字符的转向问题 [...]