在不创建页面的情况下实现页面网址的最佳方式(动态网址?)

时间:2014-05-30 06:38:31

标签: php .htaccess dynamic

我一直在思考如何管理基于MySQL中的一组数据而变化的数千个网页。

所以从本质上讲,我有成千上万的产品和#34;每个都由数据库表中的一行表示。

我目前正在做什么来分析这些"产品"通过url查看是将.php文件放在url位置,这样当用户访问http://www.mydomain.com/some_random_product.php时,他们会打开许多​​.php文件中的一个,这些文件都包含以下内容:

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

所以基本上所有的都是将url名称移交给另一个获取url名称的脚本然后在数据库中搜索相应的&#34;产品&#34;,如果它找到了产品,那么它会显示一个带有相关的产品页面信息,如果没有,则显示错误页面,指出无法找到产品。

我现在想做的是,这个过程更好,这样我就不需要在服务器上创建数千个物理文件了。尽管这是一个非常简单的任务,因为我有一个脚本来执行它,但是只需要一直运行该东西就会变得很麻烦(我必须在本地执行它,因为它是资源占用,然后复制所有页面到服务器)。

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

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

如果有人可以提出更好的方法来做这个或任何可能相关的事情,那么非常感谢,谢谢!

2 个答案:

答案 0 :(得分:3)

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

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

为了使这个案例的网址漂亮并保持SEO友好

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

# 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>

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

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

etc...

通过这种方式,您可以在一个简单的PHP页面上显示数千种不同的内容。

答案 1 :(得分:0)

看起来你在这里有几个问题。

首先,您需要构建一个动态页面,该页面从数据库中检索产品信息,并根据通过查询字符串/ GET参数传递给页面的唯一标识符显示该信息。

php.net中PHP的GET参数用法示例:

<?php
echo 'Hello ' . $_GET["name"] . '!';
?>

假设用户输入http://example.com/?name=Hannes
上面的例子将输出类似于: 你好Hannes!

其次,您希望使用mod_rewrite来访问漂亮的URL,即: example.com/products/some_random_product vs example.com/products.php?id=some_random_product

示例Apache mod_rewrite条件实现此目的:

RewriteEngine on
RewriteRule ^products/([^/.]+)/?$ products.php?id=$1 [L]

根据您提出的问题,我建议您对mod_rewrite$_GET进行一些研究,一般情况下使用PHP创建动态网页。

编辑SEO:

假设您使用mod_rewrite,SEO应该没有区别。客户端无法确定您是否真的显示products.php而不是/products/some_random_product。 mod_rewrite完全是服务器端,它与向客户端发送响应完全不同,告诉他们页面已经移动了。