豪鬼大帝 发表于 2017-3-13 11:04:38

DZ论坛访问中文用户出现“抱歉,您指定的用户空间不存在”解决方法

今天遇到了这个问题,顺便解决了!纯属搬运,希望能帮到同样出现此问题的朋友!

rewrite兼容性设置,是用来解决开启伪静态的时候,一些空间不支持中伪静态问题当用户开启了伪静态,经常碰到含有中文用户名(使用username访问空间)的链接 出现“ 用户空间不存在”

出现这样的问题的原因:
如, 心梦 正常解析 为: %D0%C4%C3%CE 。 但是地址栏中看到的是:%25D0%25C4%25C3%25CE

%对再一次替换

这时选择rewrite兼容性,切换 。设置为“ 是” 或者“否”查看是否解决
如果,还是出现,用户空间不存在

打开:source/function/function_core.php
找到:$_G['setting']['rewritecompatible'] && $username = rawurlencode($username)
更为:$_G['setting']['rewritecompatible'] && $username = $usernam

rawurlencode函数的作用:除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,这也就是%被二次处理的原因。将rawurlencode函数去掉即可!



DZX 对中文用户名的链接经常会出现“抱歉,您指定的用户空间不存在”,配置伪静态之后兼容性选择是.打开中文用户名个人空间是空白.选择否.打开个人空间就提示:抱歉,您指定的用户空间不存在..

用去掉function_core.php里面的rawurlencode函数的办法.打开任何页面.直接显示服务器500错误.我艹!!看来只能自己DIY了..

由于2个DZ.一个UTF8未出现这个问题.GBK的出现这个问题.怀疑是编码的问题..怕替换到其他地方出错.只替换了home_space.php解决问题...


解决方法如下:

打开\source\module\home\home_space.php文件,找到如下代码:
本帖隐藏的内容

if($_GET['username']) {
$member = C::t('common_member')->fetch_by_username($_GET['username']);
if(empty($member) && !($member = C::t('common_member_archive')->fetch_by_username($_GET['username']))) {
showmessage('space_does_not_exist');
}

替换成下面这段代码即可!!

if($_GET['username']) {
$gbk_username=iconv('UTF-8','GBK',urldecode($_GET['username']));
$member = C::t('common_member')->fetch_by_username($gbk_username);
if(empty($member) && !($member = C::t('common_member_archive')->fetch_by_username($gbk_username))) {
showmessage('space_does_not_exist');
}


然后在后台Rewrite 兼容性.选择否...问题解决..........

兵临城下 发表于 2017-3-13 11:04:38

打开:source/function/function_core.php
找到:$_G['setting']['rewritecompatible'] && $username = rawurlencode($username)
更为:$_G['setting']['rewritecompatible'] && $username = $usernam复制代码
开了伪静态后打开中文用户名空间我以前也遇见过,不过上面这个纯属二货瞎糊弄人,根本就不行的!
我最后完美的解决方法是:在web.config中添加<security>
   <requestFiltering allowDoubleEscaping="true" />
</security>复制代码
然后论坛后台设置-seo-勾上中文兼容
OK!

星河宇飞来 发表于 2017-3-13 11:04:38

加在<system.webServer> </system.webServer>这句中间,不用去修改任何论坛文件

如何可以重来 发表于 2017-3-13 11:04:38

有方法就是好了。

永被嫌弃的天使 发表于 2017-3-13 11:04:38

jiangchuankyo 发表于 2016-12-7 18:57
开了伪静态后打开中文用户名空间我以前也遇见过,不过上面这个纯属二货瞎糊弄人,根本就不行的!
我最后完 ...
谢谢你,非常感谢,我试试

一人一花一凋零 发表于 2017-3-13 11:04:38

主题贴的方法解决不了,我试试“jiangchuankyo”的

多拉A梦的小毛 发表于 2017-3-13 11:04:38

jiangchuankyo 发表于 2016-12-7 18:59
加在 这句中间,不用去修改任何论坛文件
我找不到这个文件,我的VPS主机,2003的系统,这个文件怎么找到,网上好多方法都找不到

越来越八卦的我 发表于 2017-3-13 11:04:38

wuyin731 发表于 2016-12-23 11:40
我找不到这个文件,我的VPS主机,2003的系统,这个文件怎么找到,网上好多方法都找不到
那个文件是IIS7.0以上版本的网站配置文件,自动生成在你网站根目录的,IIS6.0没试过

飞虎奇闻明明 发表于 2017-3-13 11:04:38

IIS6.0 着了半天也没看到在哪里有

大器晚成成不成 发表于 2017-3-13 11:04:38

本帖最后由 格东站长网插件 于 2016-12-28 18:52 编辑
jiangchuankyo 发表于 2016-12-7 18:57
开了伪静态后打开中文用户名空间我以前也遇见过,不过上面这个纯属二货瞎糊弄人,根本就不行的!
我最后完 ...
你这句肯定不行啦
$_G['setting']['rewritecompatible'] && $username = rawurlencode($username)这句,意思是让rawurlencode函数作废,那其实就只剩下
$_G['setting']['rewritecompatible'],也就是完全不对会员名做检验了!而且上面引用的代码还写漏了字,肯定报错。
之后那个进行编码判断并统一转为UTF8的思路是对的,应该说默认代码就有漏洞,应该先做编码判断的。
页: [1]
查看完整版本: DZ论坛访问中文用户出现“抱歉,您指定的用户空间不存在”解决方法