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

如何通过.htaccess将PHP查询URL转换为友好URL

解决PHP URL转友好URL的方案

没问题,我来帮你搞定这个URL重写和重定向的需求!下面是针对Apache服务器的具体实现步骤(大部分主机默认使用Apache):

前提准备

  • 确认Apache的mod_rewrite模块已开启(可以联系主机商确认,或者自行在服务器配置中启用)
  • 确保网站的blog子目录允许使用.htaccess文件(需要在Apache配置里设置AllowOverride All)

步骤1:配置.htaccess规则

在blog子目录下创建(或编辑已有的).htaccess文件,添加以下规则:

# 开启URL重写引擎
RewriteEngine On

# 1. 301永久重定向旧URL到友好URL(对SEO和用户体验友好)
RewriteCond %{THE_REQUEST} ^GET /blog/post.php\?id=.*&year=.*&titleurl=([^&\s]+) [NC]
RewriteRule ^ /blog/%1? [R=301,L]

# 2. 内部重写友好URL到实际的post.php文件
RewriteRule ^blog/([^/]+)$ /blog/post.php?titleurl=$1 [L]

规则说明:

  • 重定向规则:匹配用户或搜索引擎访问的旧参数化URL,通过301永久重定向跳转到新的友好URL。末尾的?用于清除原URL的查询字符串,L表示这是最后一条匹配规则,避免后续规则干扰。
  • 内部重写规则:将友好URL(如www.mywebsite.com/blog/my-perfect-title)偷偷转发到post.php并传递titleurl参数,用户和搜索引擎只会看到友好的URL形式。

步骤2:修改post.php的逻辑

之前你通过$_GET['id']和$_GET['year']获取参数,但现在友好URL只传递titleurl,所以需要调整PHP代码:

// 旧的参数获取方式(不再适用)
// $id = $_GET['id'];
// $year = $_GET['year'];

// 新逻辑:根据titleurl从数据库查询对应内容
$titleurl = $_GET['titleurl'];
// 假设你的文章表名为posts,titleurl是唯一标识字段
$stmt = $pdo->prepare("SELECT id, year, content FROM posts WHERE titleurl = ?");
$stmt->execute([$titleurl]);
$post = $stmt->fetch(PDO::FETCH_ASSOC);

// 处理文章不存在的情况,返回404
if (!$post) {
    header("HTTP/1.0 404 Not Found");
    echo "该文章不存在";
    exit;
}

测试验证

  1. 访问旧URL:www.mywebsite.com/blog/post.php?id=myid&year=2018&titleurl=my-perfect-title,应该自动跳转到友好URL
  2. 直接访问友好URL,确认能正常加载对应文章
  3. 用浏览器开发者工具查看网络请求,确认重定向是301状态码(对SEO至关重要)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:20:37