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

PHP简单动态URL路由实现求助:友好URL重写失败及动态变量路由配置问题

解决动态URL重写与路由问题

我来帮你理清当前配置的问题并给出可行的解决方案:

问题1:.htaccess未传递动态路由参数

你的现有RewriteRule只是把请求转发到index.php,但没有把用户请求的路径(比如/link-one)作为参数传递过去,导致index.php无法获取动态的slug值,自然没法处理任意的友好URL。

修正后的.htaccess配置

RewriteEngine On
# 跳过实际存在的文件和目录(比如css、js、图片等静态资源)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# 将请求路径作为page_slug参数传递给index.php,[L]表示这是最后一条规则,[QSA]保留原有查询参数
RewriteRule ^(.*)$ index.php?page_slug=$1 [L,QSA]

问题2:index.php硬编码路由且require用法错误

你用switch硬编码了/link-one,无法处理动态变化的slug;而且require __DIR__ . '/views/page.php?page_slug=link-one'是错误的——require的参数是文件路径,不能带查询字符串,PHP会把?page_slug=link-one当成路径的一部分,所以才会提示“文件/目录不存在”。

修正后的index.php代码

<?php
// 获取传递过来的page_slug,根路径时为空字符串
$pageSlug = $_GET['page_slug'] ?? '';

// 处理首页(根路径)
if (empty($pageSlug)) {
    require __DIR__ . '/views/index.php';
    exit;
}

// 这里建议先做数据库验证:检查该slug是否存在于你的页面表中
// 示例(假设用PDO连接数据库):
// $pdo = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
// $stmt = $pdo->prepare("SELECT * FROM pages WHERE slug = ?");
// $stmt->execute([$pageSlug]);
// $page = $stmt->fetch(PDO::FETCH_ASSOC);

// 模拟页面存在的判断,实际替换为数据库查询结果
$pageExists = true;

if ($pageExists) {
    // 将slug传递给page.php(可以用$_GET或者直接定义变量)
    $_GET['page_slug'] = $pageSlug;
    require __DIR__ . '/views/page.php';
} else {
    // 页面不存在时返回404状态码并加载404页面
    http_response_code(404);
    require __DIR__ . '/views/404.php';
}

你的page.php无需大改

原来的page.php里用$_GET['page_slug']获取参数的逻辑完全可以保留,现在index.php已经把正确的slug传递过来了,直接用它查询数据库即可:

<?php
$pageSlug = $_GET['page_slug'] ?? '';
// 这里执行数据库查询,根据slug获取页面内容
// 比如:$stmt = $pdo->prepare("SELECT content FROM pages WHERE slug = ?");
// $stmt->execute([$pageSlug]);
// $pageContent = $stmt->fetchColumn();

这样修改后,任何像/your-custom-slug的请求都会被转发到index.php,动态加载对应的page.php并传递slug参数,完美实现你想要的友好动态URL。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 22:52:36