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

如何用PHP和.htaccess实现单模板加载数组数据生成动态产品页

修改.htaccess规则

在现有.htaccess的# To internally forward /dir/foo to /dir/foo.php规则之前,插入以下产品页专属重写规则,确保规则优先级正确:

# 产品页重写规则
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^products/([^/]+)/?$ /product.php?product_id=$1 [L]

如果你的product.php放在products目录下,将规则里的路径改为/products/product.php?product_id=$1即可。该规则会将/products/[产品标识]/格式的请求内部转发到模板文件,地址栏URL保持不变,同时将产品标识作为GET参数传递给模板。


调整产品数组与模板逻辑

首先修正原有产品数组的语法问题,数组键需加引号避免PHP通知报错,确保数组键名和URL里的产品标识一一对应:

function products() {
    $products = array();
    $products['product-a'] = array(
        'heading' => 'Product A',
        'content' => '<p>Some text</p>',
    );
    $products['product-b'] = array(
        'heading' => 'Product B',
        'content' => '<p>Some text</p>',
    );
    return $products;
}

然后修改product.php模板代码,动态获取产品标识并匹配对应数据,增加不存在产品的404处理逻辑:

<?php
// 从重写规则传递的参数中获取产品标识
$product_id = $_GET['product_id'] ?? '';
$all_products = products();

// 校验产品是否存在,不存在返回404
if (!isset($all_products[$product_id])) {
    http_response_code(404);
    echo '产品不存在';
    exit;
}

$product = $all_products[$product_id];
?>
<h1><?php echo $product['heading']; ?></h1>
<?php echo $product['content']; ?>

可选优化

删除原有products目录下的product-a.php、product-b.php等独立产品文件即可,后续新增产品仅需在products()函数的数组中添加对应键的配置,无需新建文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 12:39:01