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

.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.

时间: 2024-08-19 23:20:55

htaccess Rewrite中文编码问题解决方法_Linux的相关文章

CentOS 6.5上的Tomcat启动报错问题解决方法_Linux

这里有两个错误: 1.第一个错误,APR的问题,错误详情: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path 2.第二个错误,错误详情: Exception in thread "main" java.lang.InternalError        

.htaccess rewrite 规则详细说明_Linux

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

Apache、Nginx下Font Awesome在 Firefox 中不显示问题解决方法_Linux

一.Nginx服务器解决方法 服务器使用的是 Nginx,要在响应的头部添加 Access-Control-Allow-Origin 字段,添加方法是用 add_header 指令: 配置例子: 复制代码 代码如下: location /assets/ {     gzip_static on;     expires max;     add_header Cache-Control public;     add_header Access-Control-Allow-Origin *; }

Linux(Ubuntu) adb 无法识别的问题解决方法_Linux

Linux(Ubuntu) adb 无法识别的问题 一般开发公司都开发员都有同时处理不同开发板,因为项目迭代需要.但是不同的开发板的USB并不同,导致adb无法识别.下面给出解决方法. 步骤一: 打开终端,输入lsusb   上面的2207:0006就是我们新的开发板的USB的ID,不知道如何识别的同学 ,可以通过反复的插拔查找哪个是变化值.我们需要复制:前缀的2207,新增到配置文件里面. 步骤二: 修改51-android.ruls 配置文件 在终端上输入:sudo vim /etc/ude

无法启动Apache的问题解决方法_Linux

切换到你的apache安装目录下 比如我的 C:\Program Files\Apache Software Foundation\Apache2.2\bin 在这个目录下就又一个httpd.exe 我的window服务里名称是apache2.2 所以 httpd.exe -w -n "Apache2.2" -k start 你在开始菜单apache 的Control Apache Server 下也可以找到一个start命令 从他启动也可以看到错误的行数

linux下修改MAC地址问题解决方法_Linux

在linux中,修改MAC地址 # ifdown eth0 # ifconfig eth0 hw ether 12:34:56:78:90:12 (修改的MAC地址跟原来的地址不同) # ifup eth0 (修改成功) 后,用# ifconfig 查看,MAC地址改变了,但之后输入#service network restart 或ifdowneth0命令时,会出现如下错语信息: Device eth0 has MAC address 12:34:56:78:90:12, instead of

Centos修改DNS重启或重启network服务后丢失问题解决方法_Linux

介绍 我们在配置Centos的时候,很多情况需要能联外网,那么就需要DNS解析功能,默认的是没有配置DNS信息的,所以我们得配置DNS信息 起因 我们在搜索Centos配置DNS信息的时候,很多都是说在这个文件进行配置"/etc/resolv.conf",我们在这个里面加了nameserver后确实可以ping通域名,但是重启centos或者重启network服务后就无法ping通了,在"/etc/resolv.conf"配置的nameserver信息也丢失了. 处

apache time_wait连接数太多问题解决方法_Linux

最近发现apache与负载均衡器的的连接数过多,而且大部分都是time_wait,调整apache2.conf后也没效果. 通过调整内核参数解决: 复制代码 代码如下: vi /etc/sysctl.conf 编辑文件,加入以下内容: 复制代码 代码如下: net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_fin_timeout = 30 然后,执行 /sb

MySQL5.0中文问题及JDBC数据库连接和JSP汉字编码问题解决方法总结

js|mysql|编码|汉字|解决|数据|数据库|数据库连接|问题|中文 解决这类问题的方法很多,今天在此简单的终结一下,把常碰到的问题解决方法记下来! 1,   MySQL5.0中文问题解决方案如下:     1.在dos环境下,用mysql --default-character-set=gbk -u root -p 这句话进入mysql~~     2.建数据库.表,如下:         create database admin;         use admin;