如何用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
相关产品推荐
相关产品推荐

