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

关于Pretty URL的实现求助:含ID的友好URL配置方法

实现带ID和标题的优雅URL方案

核心思路

你需要通过mod_rewrite将优雅URL(/offers/details/1234/truffle-hunter)转发到实际处理脚本(比如/offers/details/index.php),同时传递ID参数。URL中的标题仅用于SEO优化,实际数据查询只依赖ID。

步骤1:确认mod_rewrite已启用

如果使用Apache服务器,先确保mod_rewrite模块开启:

  • Ubuntu/Debian系统:执行sudo a2enmod rewrite,然后重启Apache:sudo systemctl restart apache2
  • CentOS/RHEL系统:编辑httpd.conf,取消LoadModule rewrite_module modules/mod_rewrite.so的注释,再重启Apache:sudo systemctl restart httpd

步骤2:配置.htaccess文件

在网站根目录或/offers/details/文件夹下创建/编辑.htaccess文件,添加以下规则:

# 开启重写引擎
RewriteEngine On

# 仅对不存在的文件/目录执行重写,避免影响静态资源
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# 匹配 /offers/details/[数字ID]/[任意标题] 格式,转发到index.php并传递ID
RewriteRule ^offers/details/(\d+)/.*$ /offers/details/index.php?id=$1 [L,QSA]

# 可选:将旧URL(/offers/details/?id=1234)重定向到优雅URL
# 需先在PHP中根据ID获取对应标题,再替换下方的[对应标题]
# RewriteCond %{QUERY_STRING} ^id=(\d+)$
# RewriteRule ^offers/details/$ /offers/details/%1/[对应标题]? [R=301,L]

规则说明

  • RewriteEngine On:启用URL重写功能
  • RewriteCond两条规则:确保只处理不存在的文件/目录,防止覆盖真实的静态文件(如CSS、JS)
  • RewriteRule:
    • ^offers/details/(\d+)/.*$:正则匹配URL路径,(\d+)捕获纯数字ID,.*匹配后续任意标题内容(不做校验)
    • /offers/details/index.php?id=$1:将请求转发到处理脚本,把捕获的ID作为id参数传递
    • [L]:匹配后停止执行后续规则
    • [QSA]:保留原URL中的其他查询参数(如果有)

步骤3:在PHP中获取ID

在/offers/details/index.php里,你可以直接通过$_GET['id']获取传递的ID,和处理旧URL的方式一致:

<?php
if (isset($_GET['id'])) {
    $offerId = $_GET['id'];
    // 用$offerId查询数据库获取活动信息
    // ...
} else {
    // 处理无ID的情况,返回404
    header("HTTP/1.0 404 Not Found");
    echo "页面不存在";
}
?>

额外注意事项

  1. 标题处理:URL中的标题仅用于优化体验,不参与数据查询。生成优雅URL时,建议将标题转为小写、空格替换为连字符(如Truffle Hunter转为truffle-hunter),但这一步需在生成URL的代码中处理,无需修改重写规则。
  2. 旧URL重定向:若要将旧的参数式URL永久重定向到优雅URL,可在原处理脚本中添加跳转逻辑(需先根据ID获取对应标题):
    <?php
    if (isset($_GET['id'])) {
        $offerId = $_GET['id'];
        // 查询数据库获取标题,示例:$title = "truffle-hunter";
        $elegantUrl = "/offers/details/$offerId/$title";
        header("Location: $elegantUrl", true, 301);
        exit;
    }
    ?>
    
  3. 404处理:若用户访问的ID不存在,务必返回404状态码,避免搜索引擎收录无效页面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 09:00:14