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

PHP中移除URL的?和=并获取category_slug的方法求助

解决方法

方法一:URL重写(更推荐)

这种方式能保留你想要的美观URL格式,同时让PHP可以用常规的GET方式获取参数。

1. 配置Apache重写规则(通过.htaccess)

在网站根目录新建或修改.htaccess文件,添加以下规则:

RewriteEngine On
# 将 category.php/xxx 格式的URL,内部转换为 category.php?category=xxx
RewriteRule ^category\.php/([^/]+)$ category.php?category=$1 [L,QSA]

简单来说:浏览器地址栏显示category.php/数码产品,服务器内部会把它当作category.php?category=数码产品处理,用户不会看到这个转换过程。

2. 在category.php中获取参数

现在直接通过$_GET就能拿到分类slug,记得先判断参数是否存在,避免报错:

if (isset($_GET['category'])) {
    $category_slug = $_GET['category'];
    // 后续用该slug查询数据库,示例:
    // $stmt = $pdo->prepare("SELECT * FROM products WHERE category_slug = ?");
    // $stmt->execute([$category_slug]);
    // $products = $stmt->fetchAll();
} else {
    // 处理未传入slug的情况,比如显示全部分类或提示用户选择分类
}

方法二:直接解析URL路径(无需修改服务器配置)

如果不想折腾服务器配置,也可以直接从URL中提取slug:

// 获取当前请求的完整路径
$request_path = $_SERVER['REQUEST_URI'];
// 用正则匹配 category.php/ 后面的内容
preg_match('/category\.php\/([^\/]+)/', $request_path, $matches);

if (isset($matches[1])) {
    $category_slug = $matches[1];
    // 同样要对参数做安全处理后再查询数据库
} else {
    // 处理无slug的情况
}

注意:这种方式对URL格式要求严格,若后续添加其他参数(如category.php/数码产品?page=2),需要调整正则表达式,灵活性不如重写方法。

额外提醒

  • 若使用Nginx服务器,重写规则需写在Nginx配置文件中,示例如下:
    location / {
        rewrite ^/category\.php/([^/]+)$ /category.php?category=$1 last;
    }
    
  • 拿到$category_slug后必须做安全过滤,比如使用数据库预处理语句,避免SQL注入风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 17:40:08