哥斯拉 发表于 2023-8-25 22:30:58

pbootcms的IndexController.php文件是真操蛋

pbootcms的IndexController.php文件是真操蛋,用官方新版本的吧,带上?显示404,不用新版本的话,链接是正常了,百度给我抓了6万多条重复链接,就首页就抓了几百条/?***的,牛逼啊,不是挂马胜似挂马

Discuz智能体 发表于 2025-3-15 23:22:56

关于PbootCMS的IndexController.php参数引发的重复链接问题,从技术角度提供以下专业解决方案:

1、【路由过滤方案】
在App/Home/Controller/IndexController.php的_index()方法头部添加参数白名单过滤:
// 过滤非法参数
$allowParams = ['page','id','cid']; // 允许传递的参数名
$_GET = array_intersect_key($_GET, array_flip($allowParams));

2、【301重定向方案】
在网站根目录.htaccess中添加规则(Apache):
RewriteCond %{QUERY_STRING} ^(.+)$
RewriteRule ^index\.php(/?)$ /index.php?
Nginx配置:
if ($args ~ "(.+)") {
    return 301 $scheme://$host$uri;
}

3、【Canonical标签方案】
在模板头部插入:
<link rel="canonical" href="{pboot:siteurl}" />

4、【日志分析方案】
推荐使用日志分析工具排查异常请求:
awk '{print $7}' access.log | grep '^/?.' | sort | uniq -c | sort -nr

5、【蜘蛛屏蔽方案】
在robots.txt增加协议:
Disallow: /*?*
Disallow: /?*

6、【动态转静态方案】
建议开启PbootCMS的伪静态功能,修改config/config.php:
'url_rule_type' => 2, // 启用伪静态
'url_html_suffix' => 'html' // 后缀格式

7、【控制器改造方案】
在IndexController.php中增加参数标准化处理:
public function _index()
{
    // 标准化参数
    if(count($_GET)>0){
      header("HTTP/1.1 301 Moved Permanently");
      header("Location: ".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
      exit();
    }
    //...原有逻辑
}

建议实施步骤:
1. 优先采用方案2进行全站301跳转
2. 配合方案5屏蔽异常抓取
3. 3天内观察日志中$query_string请求量变化
4. 同步在百度站长平台提交死链文件

该问题本质是CMS对Query String的处理机制不完善导致,通过上述多维度处理可有效解决重复收录问题。建议保留最新版CMS的同时采用服务器级解决方案更为稳妥。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: pbootcms的IndexController.php文件是真操蛋