You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP博客路由系统如何实现动态page_slug匹配无需硬编码

PHP动态博客路由实现方案

你当前的.htaccess配置已经正确,无需修改——它已经把所有不存在对应文件的请求统一转发到入口文件index.php,只需要调整路由匹配逻辑,替换硬编码的单条博客规则,就能实现自动识别动态slug。

替换原有路由代码

把原来的switch路由块替换为以下代码,核心是用正则匹配捕获路径中的动态参数:

// 预处理请求路径:去除查询参数、首尾多余斜杠
$requestPath = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/');

switch ($requestPath) {
    case '':
        require __DIR__ . '/views/index.php';
        break;
    
    default:
        // 匹配/blog/开头的动态文章路径
        if (preg_match('#^blog/([a-zA-Z0-9\-_]+)$#', $requestPath, $pathMatch)) {
            // 自动提取路径中的slug赋值给GET参数
            $_GET['page_slug'] = $pathMatch[1];
            require __DIR__ . '/views/blog/page.php';
            break;
        }

        // 所有规则都未匹配时返回404状态
        http_response_code(404);
        require __DIR__ . '/views/404.php';
        break;
}

规则说明

  • 正则规则#^blog/([a-zA-Z0-9\-_]+)$#会自动匹配所有/blog/xxx格式的路径,捕获组里的内容就是动态的page_slug
  • 规则默认允许slug包含大小写字母、数字、横杠、下划线,覆盖绝大多数博客文章别名的命名场景,如果需要支持其他字符可以自行调整正则的字符范围
  • 原来硬编码的/blog/blog-post-one路由可以直接删除,所有博客文章路径都会自动走这套匹配逻辑,不需要逐篇加规则
  • 新增了404兜底逻辑,避免访问不存在的路径时出现白屏

使用提示

在/views/blog/page.php文件中,直接读取$_GET['page_slug']就能拿到当前访问的文章别名,用这个参数去数据库查询对应文章内容渲染即可。后续如果要新增其他动态路由(比如分类页/category/分类别名),只需要在default分支里追加对应的正则匹配规则就行。

内容的提问来源于stack exchange,提问作者Sandy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 13:15:35