外贸网站建设,外贸网站建设公司,跨境电商独立站

PB分页时,当URL存在下横线时,导致分页打不开。

时间:2026-10-06   访问量:1002

PB原始的程序,在URL存在下横线时,如果页面有分页,会导致分页无法打开。

打开home下面的IndexController.php控制器。找到并修改函数:

 public function _empty()

然后修改代码:

   // 空拦截器, 实现文章路由转发
    public function _empty()
    {
        // 地址类型
        $url_rule_type = $this->config('url_rule_type') ?: 3;

        if (P) { // 采用pathinfo模式及p参数伪静态模式
            if ($url_rule_type == 2) { // 禁止伪静态时带index.php 和动态地址访问
                if (stripos(URL, 'index.php') !== false) {
                    _404(lang('index.nocont'));
                }
            }
            $path = P;
        } elseif ($url_rule_type == 3 && isset($_SERVER["QUERY_STRING"]) && $qs = $_SERVER["QUERY_STRING"]) { // 采用简短传参模式
            parse_str($qs, $output);
            unset($output['page']); // 去除分页
            if ($output && !current($output)) { // 第一个路径参数不能有值,否则非标准路径参数
                $path = key($output); // 第一个参数为路径信息,注意PHP数组会自动将key点符号转换下划线
            } elseif (get('tag')) { // 对于兼容模式tag需要自动跳转tag独立页面
                $tag = new TagController();
                $tag->index();
            } elseif (get('keyword')) { // 兼容模式搜索处理
                $search = new SearchController();
                $search->index();
            }
        }

        // 判断是否存在后缀
        $url_rule_suffix = substr($this->config('url_rule_suffix'), 1);
        $suffix = false;
        $slash = false;

        // 【修改1】清理末尾斜杠
        $clean_path = trim($path, '/');

        // 【修改2】兼容带下划线栏目名的分页精准匹配 (如 Product_Manufacturing_2)
        if (preg_match('/^(.*)_(\d+)$/i', $clean_path, $matchs)) {
            $path = $matchs[1];
            define('CMS_PAGE_CUSTOM', true);
            $_GET['page'] = $matchs[2]; // 设置注入页码
            $suffix = false; // 栏目分页不能算作文件后缀,必须为 false
        } elseif (preg_match('/(.*)(_|\.)' . $url_rule_suffix . '$/', $path, $matchs)) {
            $path = $matchs[1];
            $suffix = true;
        } elseif (preg_match('/^[\w\-\/]+\/$/', $path)) {
            $slash = true;
            $path = trim($path, '/');
        }
        
        $path = escape_string($path);
        $path_arr = $path ? explode('/', $path) : array();
        
        if (Config::get('area_path') && Config::get('city_status')) {
            _404(lang('index.pathplug'));
        } else {
            // 多语言站目录名访问 例如/en/ @LiuXiaoBai
            if (Config::get('area_path') && !get_domain()) {
                $lgs = $this->config('lgs');
                if ($lgs[$path_arr[0]]) {
                    $lang = array_shift($path_arr);
                    cookie('lang', $lang);
                    cookie('lg', cookie('lang'));
                    $path = implode('/',$path_arr);
                } else {
                    cookie('lang', '');
                    cookie('lg', get_default_lg());
                }
            }
            // 城市分站 @LiuXiaoBai
            if (Config::get('city_status')) {
                if (Config::get('city_rule_type') == 2) {
                    $parts = explode('.', get_http_host());
                    $path_city = $parts[0];
                } else {
                    $path_city = $path_arr[0];
                }
                if (strtolower($path_arr[0]) == 'city' && $suffix) {
                    cookie('city', '');
                    cookie('city_name', '');
                    $this->getCityIndex();
                } elseif ($this->cityinfo = get_city_info($path_city, 'name,site')) {
                    if (Config::get('city_rule_type') != 2) {
                        $city = array_shift($path_arr);
                        $path = implode('/',$path_arr);
                    }
                    cookie('city', $city);
                    cookie('city_name', $this->cityinfo->name);
                } else {
                    cookie('city', '');
                    cookie('city_name', '');
                }
            }
            
            // 开始路由
            switch (strtolower($path_arr[0])) {
                case 'sitemap.xml': 
                    $sitemap = new SitemapController();
                    $sitemap->index();
                    exit();
                case 'sitemap.txt':
                    $sitemap = new SitemapController();
                    $sitemap->linkTxt();
                    exit();
            }
        }
        
        // 开始路由
        if (isset($path_arr) && count($path_arr) > 0 && preg_match('/^[\w\-\/]+$/', $path)) {
            switch (strtolower($path_arr[0])) {
                case 'search':
                case 'keyword':
                    $search = new SearchController();
                    $search->index();
                    break;
                case 'message':
                    $msg = new MessageController();
                    $msg->index();
                    break;
                case 'form':
                    $_GET['fcode'] = $path_arr[1];
                    $form = new FormController();
                    $form->index();
                    break;
                case 'sitemap':
                case 'sitemap_xml':
                    $sitemap = new SitemapController();
                    $sitemap->index();
                    break;
                case 'sitemap_txt':
                    $sitemap = new SitemapController();
                    $sitemap->linkTxt();
                    break;
                case 'tag':
                    $tag = new TagController();
                    $tag->index();
                    break;
                case 'member':
                    $member = new MemberController();
                    $member->{$path_arr[1]}();
                    break;
                case 'comment':
                    $comment = new CommentController();
                    $comment->{$path_arr[1]}();
                    break;
                case 'spider':
                    $spider = new SpiderController();
                    $spider->index();
                    break;
                case 'access':
                    $access = new AccessController();
                    $access->index();
                    break;
                default:

                    $url_break_char = $this->config('url_break_char') ?: '_';
                    $url_rule_content_path = $this->config('url_rule_content_path') ? true : false;
                    $err = '';
                    $iscontent = false;

                    // 开始进行地址匹配
                    if (!$suffix && !!$sort = $this->model->getSort($path)) {
                        // 栏目名称,即栏目全路径匹配(支持带下划线的完整栏目名)
                    } elseif (preg_match('/^([a-zA-Z0-9\-\_]+)' . $url_break_char . '([0-9]+)$/i', $path, $matchs) && !!$sort = $this->model->getSort($matchs[1])) {
                        // 栏目名称_分页,栏目分页的情况
                        define('CMS_PAGE_CUSTOM', true); // 设置走自定义CMS分页
                        $_GET['page'] = $matchs[2]; // 设置分页参数
                    } else {
                        
                        // 详情页至少是2级,对地址进行栏目和内容路径拆分,访问详情页  代码移前方便获取内容表名称 @LiuXiaoBai
                        $part1 = dirname($path);
                        $part2 = basename($path);
                        $stcode = '';
                        
                        // 内容表名称 @LiuXiaoBai
                        if (! ! $sort = $this->model->getSort($part1)) {
                            $stcode = $sort->scode;
                        }
                        
                        if ($url_rule_content_path && ! ! $data = $this->model->getContent($path, $stcode)) {
                            $iscontent = true; // 短路径情况
                        } elseif (!$url_rule_content_path) {
                           
                            while ($part1 != '.') {
                                if ((! ! $sort = $this->model->getSort($part1)) && ! ! $data = $this->model->getContent($part2, $stcode)) {
                                    // 栏目名称/内容名称或ID
                                    $iscontent = true;
                                    $scode = $sort->scode;
                                    break;
                                } elseif (preg_match('/^([a-zA-Z0-9\-\/]+)' . $url_break_char . '([0-9]+)$/i', $part1, $matchs) && !!$model = $this->model->checkModelUrlname($matchs[1])) {
                                    // 模型名称_栏目ID/内容名称或ID
                                    $data = $this->model->getContent($part2, $stcode);
                                    $iscontent = true;
                                    $scode = $matchs[2];
                                    // 限制串模型多路径
                                    if (!!$data->urlname && $matchs[1] != $data->urlname) {
                                        $err = true;
                                    }
                                    break;
                                } else {
                                    $part2 = basename($part1) . '/' . $part2;
                                    $part1 = dirname($part1);
                                }
                            }

                            // 限制串栏目多路径
                            if ($scode != $data->scode) {
                                $err = true;
                            }

                            // 限制串内容ID及名称多路径
                            if (!!$data->filename && $part2 != $data->filename) {
                                $err = true;
                            }
                        }

                        // 执行未配置栏目名称但是配置了模型路径的情况路径匹配
                        if (!$iscontent) {
                            preg_match('/^([a-zA-Z0-9\-\/]+)(' . $url_break_char . '([0-9]+))?' . $url_break_char . '([0-9]+)$/i', $path, $matchs);
                            if ($matchs[2] && $model = $this->model->checkModelUrlname($matchs[1])) {
                                // 模型名称_栏目ID_分页
                                define('CMS_PAGE_CUSTOM', false);
                                $sort = $this->model->getSort($matchs[3]);
                                $_GET['page'] = $matchs[4]; // 分页
                            } elseif (!!$model = $this->model->checkModelUrlname($matchs[1])) {
                                // 模型名称_栏目ID
                                $sort = $this->model->getSort($matchs[4]);
                            }

                            // 限制串模型和栏目名称多路径,当栏目名称不为空时不允许使用模型路径
                            if ($sort->filename != '') {
                                $err = true;
                            }

                            // 限制串模型多路径
                            if (!!$sort->urlname && $matchs[1] != $sort->urlname) {
                                $err = true;
                            }
                        }
                    }

                    if ($iscontent) {
                        define('CMS_PAGE', false); // 使用普通分页处理模型
                        if (!!$data && $suffix && !$err) {
                            //不等于当前语言不给访问 @LiuXiaoBai
                            if (Config::get('area_path') && $data->acode != cookie('lg')) {
                                _404(lang('index.badlang'));
                            }
                            //页面禁用了详情页不给访问 isdetail @LiuXiaoBai
                            if ($this->model->getContentIsDetail($data->scode)->isdetail) {
                                _404(lang('index.nocont'));
                            }
                            $this->getContentPage($data);
                        } else {
                            _404(lang('index.nocont'));
                        }
                    } else {
                        define('CMS_PAGE', true); // 使用cms分页处理模型 增加&& ! is_numeric($path)判断,禁止通过栏目ID也可以访问到栏目页面 @LiuXiaoBai
                        if (! ! $sort && ! $suffix && ! $err && ! is_numeric($path)) {
                            //不等于当前语言不给访问 @LiuXiaoBai
                            if (Config::get('area_path') && $sort->acode != cookie('lg')) {
                                _404(lang('index.badlang'));
                            }
                            //页面启用了404不给访问 is404 @LiuXiaoBai
                            if ($sort->is404) {
                                _404(lang('index.nopage'));
                            }
                            if ($sort->type == 1) {
                                $this->getAboutPage($sort);
                            } else {
                                $this->getListPage($sort);
                            }
                        } else {
                            _404(lang('index.nopage'));
                        }
                    }
            }
        } else {
            // 不存在的静态资源请求实施404响应机制  
            $path = trim(str_replace(SITE_DIR, '', parse_url(URL, PHP_URL_PATH)), '/');
            $city = cookie('city');
            $cityRuleType = $this->config('city_rule_type_index');
            // 允许的路径:空路径、index.php、cookie('lg')、分站首页
            $isIndexPath = (
                empty($path) || 
                $path === 'index.php' || 
                $path === cookie('lg') || 
                ($city && (
                    ($cityRuleType == 2 && $path === $city) || 
                    ($cityRuleType != 2 && $path === $city . '.html')
                ))
            );
            if ($isIndexPath) {
                $this->getIndexPage();
            } else {
                _404(lang('index.nocont'));
            }
        }
    }



正在加载评论…