无需创建页面即可实现页面 url 的最佳方法(动态 url?)

Cra*_*der -1 php .htaccess dynamic

我已经思考了很长一段时间,如何管理基于 MySQL 中的一组数据而变化的数千个网页。

所以本质上,我有数千个“产品”,每个产品都由数据库表中的一行表示。

目前,我对通过 url 可查看的每个“产品”进行分页时所做的就是在 url 位置放置一个 .php 文件,这样当用户访问时,http://www.mydomain.com/some_random_product.php他们将打开许多 .php 文件之一,这些文件都包含以下内容:

<?php
$thisPageName = basename(__FILE__, ".php");
include '/out/of/root/allProducts.controller.php';
?>
Run Code Online (Sandbox Code Playgroud)

因此,基本上所有操作都是将 url 名称传递给另一个脚本,该脚本获取 url 名称,然后在数据库中搜索相应的“产品”,如果找到产品,则显示包含相关信息的产品页面,如果没有找到,则显示错误页面显示无法找到该产品。

我现在想做的是更好的过程,这样我就不需要在服务器上创建数千个物理文件。尽管这是一项非常简单的任务,因为我有一个脚本来完成它,但必须一直运行它就变得很痛苦(我必须在本地执行它,因为它是一个资源消耗者,然后复制所有页面到服务器)。

可能只是一个文件,该位置的所有 url 都会加载,而无需更改 url,因为我需要它来查找相关信息。

我想补充一点,运行该域的服务器是一个我可以完全访问的 VPS,并且我知道 Apache mod_rewrite 模块可能在这里有用,但老实说,我不知道从实施背后的逻辑开始那。

如果有人能提出更好的方法来做到这一点或任何可能相关的事情,那么我们将不胜感激,谢谢!

小智 5

在 URL 中传递产品 ID,并使用 .php 在 PHP 脚本中捕获它$_GET[productId]

然后,您应该查询数据库以获取与该 ID 匹配的产品行并显示该产品的数据。

为了使 URL 在这种情况下变得漂亮并保持 SEO 友好

#.htaccess
RewriteEngine On
RewriteRule ^product/([0-9]+)/(.*)$ /product/product.php?productId=$1&name=$2
Run Code Online (Sandbox Code Playgroud)

 

# URL:
<a href="/product/product.php?productId=123&name=product-one">
    Product one
</a>

<!-- OR (Because of the URL rewriting) -->

<a href="/product/123/product-one">
    Product one
</a>
Run Code Online (Sandbox Code Playgroud)

 

# PHP Script
$id = $_GET[productId];

$sql = "SELECT *
FROM `product`
WHERE `id` = ?;";

etc...
Run Code Online (Sandbox Code Playgroud)

这样您就可以在一个简单的 PHP 页面上显示数千种不同的内容。