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

如何使用.htaccess结合MySQL将站点动态游戏URL重写为语义化路径

URL美化实现方案

1. 前置环境确认

  • 确认Apache服务器已开启mod_rewrite扩展
  • 确认站点配置中AllowOverride参数设置为All,允许.htaccess文件生效

2. 编写.htaccess重写规则

在站点根目录新建或编辑.htaccess文件,写入以下规则:

RewriteEngine On
# 将/games/游戏名 格式的请求内部转发到games.php处理,地址栏不跳转
RewriteRule ^games/([a-zA-Z0-9_-]+)/?$ games.php?enname=$1 [L,NC]

3. 调整PHP后端查询逻辑

原来的games.php是通过数字ID查询游戏数据,需要修改为按英文名查询:

// 原有逻辑(已废弃)
// $gameId = intval($_GET['game']);
// $sql = "SELECT * FROM 表名 WHERE id = {$gameId}";

// 新查询逻辑,注意做参数过滤避免SQL注入
$enname = addslashes(trim($_GET['enname']));
// 更推荐使用PDO预处理语句
$stmt = $pdo->prepare("SELECT * FROM 表名 WHERE enname = ?");
$stmt->execute([$enname]);
$data = $stmt->fetch();

注意:需保证数据库中enname字段为唯一值,避免出现多个游戏匹配同一个英文名的异常。

4. 旧链接301重定向(可选,建议配置)

如果旧格式链接已经被搜索引擎收录,可在games.php开头增加以下逻辑,将旧链接永久跳转到新格式链接,避免权重丢失:

// 检测是否是访问旧格式的带ID参数链接
if (isset($_GET['game']) && !isset($_GET['enname'])) {
    $gameId = intval($_GET['game']);
    $stmt = $pdo->prepare("SELECT enname FROM 表名 WHERE id = ?");
    $stmt->execute([$gameId]);
    $enname = $stmt->fetchColumn();
    if ($enname) {
        header("HTTP/1.1 301 Moved Permanently");
        header("Location: /games/{$enname}");
        exit();
    }
}

配置完成后,你页面中所有跳转游戏详情页的链接都可以直接写成/games/<?=$data['enname']?>格式即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:18:04