Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

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

[复制链接]
wuyin731 发表于 2016-12-7 16:40:32 | 显示全部楼层 |阅读模式
今天遇到了这个问题,顺便解决了!纯属搬运,希望能帮到同样出现此问题的朋友!

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 兼容性.选择否...问题解决..........

jiangchuankyo 发表于 2016-12-7 18:57:53 | 显示全部楼层
  1. 打开:source/function/function_core.php
  2. 找到:$_G['setting']['rewritecompatible'] && $username = rawurlencode($username)
  3. 更为:$_G['setting']['rewritecompatible'] && $username = $usernam
复制代码

开了伪静态后打开中文用户名空间我以前也遇见过,不过上面这个纯属二货瞎糊弄人,根本就不行的!
我最后完美的解决方法是:在web.config中添加
  1. <security>
  2.    <requestFiltering allowDoubleEscaping="true" />
  3. </security>
复制代码

然后论坛后台设置-seo-勾上中文兼容
OK!
回复

使用道具 举报

jiangchuankyo 发表于 2016-12-7 18:59:50 | 显示全部楼层
加在<system.webServer> </system.webServer>这句中间,不用去修改任何论坛文件
回复

使用道具 举报

lz49858007 发表于 2016-12-8 10:55:50 | 显示全部楼层
本帖最后由 lz49858007 于 2017-10-8 12:43 编辑

有方法就是好了。









回复

使用道具 举报

 楼主| wuyin731 发表于 2016-12-23 11:16:04 | 显示全部楼层
jiangchuankyo 发表于 2016-12-7 18:57
开了伪静态后打开中文用户名空间我以前也遇见过,不过上面这个纯属二货瞎糊弄人,根本就不行的!
我最后完 ...

谢谢你,非常感谢,我试试
回复

使用道具 举报

 楼主| wuyin731 发表于 2016-12-23 11:28:10 | 显示全部楼层
主题贴的方法解决不了,我试试“jiangchuankyo”的
回复

使用道具 举报

 楼主| wuyin731 发表于 2016-12-23 11:40:21 | 显示全部楼层
jiangchuankyo 发表于 2016-12-7 18:59
加在 这句中间,不用去修改任何论坛文件

我找不到这个文件,我的VPS主机,2003的系统,这个文件怎么找到,网上好多方法都找不到
回复

使用道具 举报

jiangchuankyo 发表于 2016-12-23 18:50:45 | 显示全部楼层
wuyin731 发表于 2016-12-23 11:40
我找不到这个文件,我的VPS主机,2003的系统,这个文件怎么找到,网上好多方法都找不到

那个文件是IIS7.0以上版本的网站配置文件,自动生成在你网站根目录的,IIS6.0没试过
回复

使用道具 举报

 楼主| wuyin731 发表于 2016-12-28 09:28:30 | 显示全部楼层
IIS6.0 着了半天也没看到在哪里有
回复

使用道具 举报

格东站长网插件 发表于 2016-12-28 18:51:10 | 显示全部楼层
本帖最后由 格东站长网插件 于 2016-12-28 18:52 编辑
jiangchuankyo 发表于 2016-12-7 18:57
开了伪静态后打开中文用户名空间我以前也遇见过,不过上面这个纯属二货瞎糊弄人,根本就不行的!
我最后完 ...

你这句肯定不行啦
$_G['setting']['rewritecompatible'] && $username = rawurlencode($username)这句,意思是让rawurlencode函数作废,那其实就只剩下
$_G['setting']['rewritecompatible'],也就是完全不对会员名做检验了!而且上面引用的代码还写漏了字,肯定报错。
之后那个进行编码判断并统一转为UTF8的思路是对的,应该说默认代码就有漏洞,应该先做编码判断的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-25 15:23 , Processed in 0.024516 second(s), 3 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表