许多用户在使用DedeCMS后台添加新变量时,可能会遇到“Request var not allow!”的错误提示。本文将详细介绍如何解决这一问题,并提供具体的操作步骤。 首先,我们需要打开DedeCMS的根目录下的文件 include/common.inc.php,然后找到以下代码段(大约位于第59行):

//检查和注册外部提交的变量
function CheckRequest(&$val) {
if (is_array($val)) {
foreach ($val as $_k=>$_v) {
CheckRequest($_k);
CheckRequest($val[$_k]);
}
} else{
if( strlen($val)>0 && preg_match('#^(cfg_|GLOBALS)#',$val) )
{
exit('Request var not allow!');
}
}
}
    
请注意,此解决方案适用于较早版本的DedeCMS。对于最新的v5.7版本(2011.8.10更新),这部分内容已经被修订,并增加了更多的判断逻辑。 接下来,将上述代码替换为以下内容:

//检查和注册外部提交的变量
function CheckRequest(&$val) {
if (is_array($val)) {
foreach ($val as $_k=>$_v) {
if($_k == 'nvarname') continue;
CheckRequest($_k);
CheckRequest($val[$_k]);
}
} else{
if( strlen($val)>0 && preg_match('#^(cfg_|GLOBALS)#',$val) )
{
exit('Request var not allow!');
}
}
}
    
完成修改后,请保存文件并重新尝试在后台添加新变量。 对于最新版本的DedeCMS(截至2011年11月11日的v5.7版),可能仍然会出现“Request var not allow!”的问题。以下是相关代码的更新:

//检查和注册外部提交的变量 (2011.8.10 修改登录时相关过滤)
function CheckRequest(&$val) {
if (is_array($val)) {
foreach ($val as $_k=>$_v) {
if($_k == 'nvarname') continue;
CheckRequest($_k);
CheckRequest($val[$_k]);
}
} else
{
if( strlen($val)>0 && preg_match('#^(cfg_|GLOBALS|_GET|_POST|_COOKIE)#',$val) )
{
exit('Request var not allow!');
}
}
}
    
在文件 include/common.inc.php 中,找到以下代码:
if( strlen($svar)>0 && preg_match('#^(cfg_|GLOBALS|_GET|_POST|_COOKIE)#',$svar) ) 官方似乎在此处出现了一个小疏忽,写成了“如果添加的变量名长度大于零”就返回错误。只需将“>”改为“<”即可解决问题。需要修改两处:第74行和第96行。 通过以上步骤,您可以成功解决DedeCMS后台添加新变量时出现的“Request var not allow!”错误问题。