• 网站所有资源均来自网络,如有侵权请联系站长删除!站长QQ:1295341837

ISAPI_Rewrite的.htaccess Rewrite中文编码伪静态错误的问题解决方法

网站制作学习 Mlingkun 2017-04-13 1437 次浏览

ISAPI_Rewrite下的.htaccess文件

RewriteRule ^(.*).html$ index.php?id=$1 

对于一个网址https://www.mlk.name/我是谁.html 我们将会遇到以下4种情况 

一、https://www.mlk.name/我是谁.html (这里的”我是谁”是GB2312编码) 

IE打开,接收到的id是utf8编码的”我是谁” 

FireFox打开,接收不到id值,并且Apache会出现403错误。

这里需要着重说明一下,因为FireFox会将”我是谁”自动urlencode,如果你的页面链接中”我是谁”的编码是gb2312就会出错。 


二、https://www.mlk.name/我是谁.html (这里的”我是谁”是UTF8编码) 

IE和FireFox打开,都可以接收到id值 


三、https://www.mlk.name/%CE%D2%CA%C7%CB%AD.html (这里是urlencode后的”我是谁”GB2312编码) 

IE和FireFox打开,都接收不到id值,并且Apache会出现403错误。 


四、https://www.mlk.name/%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。


终极解决办法

如果程序为GB2312编码又无法修改为UTF-8编码,还有终极解决方法,那就是ISAPI_Rewrite下的.htaccess文件规则后面只需添加 NU 参数即可。

具体看我得上篇文章!