htaccess Rewrite中文编码问题解决方法

.htaccess文件
RewriteRule ^(.*).html$ index.php?id=$1
对于一个网址http://www.jb51.net/我是谁.html 我们将会遇到以下4种情况
http://www.jb51.net/我是谁.html (这里的”我是谁”是GB2312编码)
IE打开,接收到的id是utf8编码的”我是谁”
FireFox打开,接收不到id值,并且Apache会出现403错误。
这里需要着重说明一下,因为FireFox会将”我是谁”自动urlencode,如果你的页面链接中”我是谁”的编码是gb2312就会出错。
http://www.jb51.net/我是谁.html (这里的”我是谁”是UTF8编码)
IE和FireFox打开,都可以接收到id值
http://www.jb51.net/%CE%D2%CA%C7%CB%AD.html (这里是urlencode后的”我是谁”GB2312编码)
IE和FireFox打开,都接收不到id值,并且Apache会出现403错误。
http://www.jb51.net/%E6%88%91%E6%98%AF%E8%B0%81.html (这里是urlencode后的”我是谁”UTF8编码)
IE和FireFox打开,都可以接收到id值
说明:
“我是谁”的UTF8编码urlencode后为 %E6%88%91%E6%98%AF%E8%B0%81
“我是谁”的GB2312编码urlencode后为 %CE%D2%CA%C7%CB%AD
结论:
Rewrite只接收UTF8
IE和FireFox对中文URL的编码不同,要注意.
这也是为什么上面的例子接收不到id值,并且出403错误.
为了避免这种情况出现,页面中的链接最好是UTF8编码的,如果是GB2312,一定会有问题.
最好的习惯是UTF8编码并urlencode,也就是上文的例4.

(0)

相关推荐

  • .htaccess rewrite 规则详细说明

    国内的虚拟机一般不提供.htaccess功能(据我所知,discuz的主机好像提供此功能),而在国外主机中,.htaccess功能似乎是标配,笔者的Blog架在MT上,支持.htaccess,每次看到一堆别人写好了的.htaccess设置,很多命令都不甚了了,查看.修改起来很不方便,痛定思痛,潜心学习一下,知其所以然嘛- 学习前提:(不会的朋友要学习一下,才能更好的理解下面的文字呢) Linux基础(不会也没事啦,写个.htaccess没必要大费周折啦,推荐:鸟哥私房菜linux基础) 正则表达

  • 用ISAPI_Rewrite让IIS也支持如Apache下.htaccess的URL重写

    前些日子用Linux做服务器写了一些东西,发现Apache下的.htaccess真是个好东西!不仅能实现URL真重写,还能实现假重写.真重写可以有效降低代码量与服务器资源消耗量,伪重写可以有效减少服务器的静态文件体积,节约了空间,真是不错!其实htaccess的功能远不只如此. 言归正传,那么IIS下能不能也实现htaccess这样激动人心的功能呢?ASP.NET2.0这个东东不是服务器级的,不能胜任重写这个重任,那么只有交给ISAPI了,在网上搜索,还居然真有公司(组织)开发了这种东东!不可思

  • 利用.htaccess的Rewrite规则实现Discuz论坛的伪静态链接

    在后台开启了"URL Rewrite",看起来一切正常,可是点击某一栏目的时候却怎么都进不去,显示的依然是论坛的首页.看了一下论坛目录下,原来这下面并没有自己的.htaccess文件,所以默认使用的应该是Godaddy主机的.htaccess,而默认的肯定不会有针对Discuz的Rewrite规则,所以加入了下面的语句,一切都正常了~ 复制代码 代码如下: RewriteEngine On RewriteBase / RewriteRule ^archiver/([a-z0-9\-]+

  • Discuz 7.0伪静态ReWrite的.htaccess规则

    具体操作步骤如下: 1.将您已经建立的.htaccess文件下载到本地,或者进入易联主机控制面版,找到您要修改的.htaccess文件,点击"Edit"即可进行编辑: 2.将以下规则添加到.htaccess文件中,按照规则中的说明进行修改,并提交保存: 复制代码 代码如下: # 将 RewriteEngine 模式打开 RewriteEngine On # 修改以下语句中的 /bbs 为你的论坛目录地址,如果程序放在根目录中,请将 /bbs 修改为 / RewriteBase /bbs

  • htaccess Rewrite中文编码问题解决方法

    .htaccess文件 RewriteRule ^(.*).html$ index.php?id=$1 对于一个网址http://www.jb51.net/我是谁.html 我们将会遇到以下4种情况 http://www.jb51.net/我是谁.html (这里的"我是谁"是GB2312编码) IE打开,接收到的id是utf8编码的"我是谁" FireFox打开,接收不到id值,并且Apache会出现403错误. 这里需要着重说明一下,因为FireFox会将&qu

  • java 多线程饥饿现象的问题解决方法

    java 多线程饥饿现象的问题解决方法 当有线程正在读的时候,不允许写 线程写,但是允许其他的读线程进行读.有写线程正在写的时候,其他的线程不应该读写.为了防止写线程出现饥饿现象,当线程正在读,如果写线程请求写,那么应该禁止再来的读线程进行读. 实现代码如下: File.Java package readerWriter; public class File { private String name; public File(String name) { this.name=name; } }

  • python中requests爬去网页内容出现乱码问题解决方法介绍

    最近在学习python爬虫,使用requests的时候遇到了不少的问题,比如说在requests中如何使用cookies进行登录验证,这可以查看这篇文章.这篇博客要解决的问题是如何避免在使用requests的时候出现乱码. import requests res=requests.get("https://www.baidu.com") print res.content 以上就是使用requests进行简单的网页请求数据的方式.但是很容易出现乱码的问题. 我们可以通过在网页上右击查看

  • Ubuntu“无法打开锁文件(Could not get lock)”问题解决方法

    用apt-get安装软件时提示: 无法获得锁 /var/lib/dpkg/lock - open(11:资源暂时不可用) 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它? 其实报错已经给了提示了,就是有进程正在占用apt-get命令,So... 命令跑起来,找出这个进程,kill这个进程! ps -aux | grep "apt" sudo kill PID(进程编号) 检查是否还有apt进程: ps -e | grep apt 如果没有提示,则表示apt进程

  • Android编程开发ScrollView中ViewPager无法正常滑动问题解决方法

    本文实例讲述了Android编程开发ScrollView中ViewPager无法正常滑动问题解决方法.分享给大家供大家参考,具体如下: 这里主要介绍如何解决ViewPager在ScrollView中滑动经常失效.无法正常滑动问题. 解决方法只需要在接近水平滚动时ScrollView不处理事件而交由其子View(即这里的ViewPager)处理即可,重写ScrollView的onInterceptTouchEvent函数,如下: package cc.newnews.view; import an

  • CloudStack SSVM启动条件源码阅读与问题解决方法

    CloudStack SSVM启动条件源码阅读与问题解决方法: 在CloudStack建立zone的时候,经常遇到SSVM不启动,或者根本就没有SSVM的情况,分析CloudStack日志,会发现有"Zone 1 is not ready to launch secondary storage VM yet"打印,意思是zone还未准备好启动SSVM. 通过查询CloudStack源代码,发现启动SSVM前有如下检查:         获取Zone里的template. select

  • javascript跨域方法、原理以及出现问题解决方法(详解)

    javascript跨域访问是web开发者经常遇到的问题,什么是跨域,一个域上加载的脚本获取或操作另一个域上的文档属性,下面将列出三种实现javascript跨域方法: 1.基于iframe实现跨域 基于iframe实现的跨域要求两个域具有aa.xx.com,bb.xx.com这种特点,也就是两个页面必须属于一个基础域(例如都是xxx.com,或是xxx.com.cn),使用同一协议(例如都是 http)和同一端口(例如都是80),这样在两个页面中同时添加document.domain,就可以实

  • JavaScript汉诺塔问题解决方法

    本文实例讲述了JavaScript汉诺塔问题解决方法.分享给大家供大家参考.具体实现方法如下: <script language="javascript"> var han=function (disc,src,aux,dst){ if(disc>0){ han(disc-1,src,dst,aux); document.writeln("move disc "+disc+" from "+src+" to "

  • .Net获取URL中文参数值的乱码问题解决方法总结

    本文总结分析了.Net获取URL中文参数值的乱码问题解决方法.分享给大家供大家参考,具体如下: 解决方法: 1.设置web.config文件 <system.web> <globalization requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN" fileEncoding="gb2312" /> </system.

  • thinkPHP分组后模板无法加载问题解决方法

    本文分析了thinkPHP分组后模板无法加载问题解决方法.分享给大家供大家参考,具体如下: 一个分组简要的目录结构如下图所示: 默认分组配置为Home.当访问localhost/server/时可以正常访问前台,localhost/server/home/Index/index也能正常访问. 但是,localhost/server/admin却不能加载tpl页面,但是能够访问到控制器(localhost/server/admin/Index/index能访问,display不出页面). 解决:

随机推荐