【问题标题】:Best way to implement page urls without creating pages (dynamic urls?)在不创建页面的情况下实现页面 url 的最佳方法(动态 url?)
【发布时间】:2014-07-19 20:33:18
【问题描述】:

我一直在思考如何管理数以千计的网页,这些网页会根据 MySQL 中的一组数据发生变化。

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

我目前对通过 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 名称,然后在数据库中搜索相应的“产品”,如果找到该产品,那么它会显示一个包含相关信息的产品页面,如果没有的话显示一个错误页面,指出无法找到该产品。

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

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

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

如果有人能提出更好的方法或任何可能相关的方法,我们将不胜感激,谢谢!

【问题讨论】:

  • 您应该检查“动态页面”的含义。创建多个页面只是为了展示产品并不是最好的解决方案。而是创建一个基于产品 ID 生成内容的页面(例如 product.php?productId=12)。我相信您可以找到有关创建产品页面的教程或类似的示例。
  • @CullyLarson 这确实有道理,但就 SEO 而言,最好有 products.php?src=this_random_productthis_random_product.php 之类的东西吗?我认为拥有一个独特的网址会是更好的选择,尽管我可以错了吗?
  • 您是否在问如何执行products/longer-product-name 之类的操作并将其指向一个脚本(例如您的product.php 脚本),而longer-product-name 可以通过$_GET['product_name'] 之类的方式访问?
  • @CullyLarson 我目前拥有products/seo+friendly+url.php。我想要products/seo+friendly+url.php,但没有物理页面,而只是重定向在products/ 中访问的每个url 以加载templates/page_template.php
  • 我明白了。我在搜索“htaccess rewrite url get parameters”时发现了一些有用的参考资料。这个webmasters.stackexchange.com/questions/23190/…9lessons.info/2009/11/pretty-urls-with-htaccess-file.html

标签: php .htaccess dynamic


【解决方案1】:

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

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

为了让这个案例的 URL 更漂亮并保持 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 页面上显示数千种不同的内容。

【讨论】:

  • 您好,感谢侯斯尼的回复。我已经有了类似的东西,但带有 SEO 友好的 url,更像是 Cully 在 cmets 中提供的第二个链接。我想避免使用一个特定页面来处理数千个,尤其是像你提到的那样一个非常不实用的 URL。所以本质上不是搜索产品ID,而是按特定顺序搜索其代码和关键字的描述。 Cully 的链接:9lessons.info/2009/11/pretty-urls-with-htaccess-file.html
  • 这是一个危险的建议,尤其是考虑到用户假定的经验水平。 @IndigoIdentity,在考虑使用此代码之前,请务必阅读 SQL 注入和转义查询。话虽如此,这是朝着正确方向迈出的一步。
  • @Jody 这就是为什么我把问号放在那里,参数化查询。以他的水平,他应该先练习。
  • @IndigoIdentity 我们的答案是一样的,只是我提供了一些关于如何获得产品结果的更多信息。
  • @IndigoIdentity URL == GET
【解决方案2】:

您在这里似乎有几个问题。

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

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

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

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

其次,您想使用 mod_rewrite 来允许访问漂亮的 URL,即: example.com/products/some_random_productexample.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 完全是服务器端的,它与向客户端发送响应告诉他们页面已经移动完全不同。

【讨论】:

  • 感谢您的回复!我明白你在说什么,我相信你也明白我在说什么。我已经完成的第一部分是我有一个脚本可以正确获取和检索信息,然后根据与 url 值相关的产品信息的可用性显示产品信息或错误(由 _ 分隔)。我一直认为我需要的是一个抓取 url 然后将其发送到处理请求的脚本的页面,这工作正常......但我过去每次都使用一个物理页面来处理这个方面。跨度>
  • 第二部分我想我被困住了,是的,其中有一些未说出口的问题......我很欣赏这些很好的例子,因为这就是我所需要的,但我想另一个直接的问题是这个。就 SEO 而言,每个产品都有一个独特的页面更好,还是有一个页面,product.php 通常可以接受多个扩展?我一直认为,在爬虫和排名机器的眼中,拥有一个独特的页面会更有利。
  • 我知道你现在得到了什么,这实际上无关紧要,因为它不是在运行时发生的。我希望我能给你 2 ups :)
  • 还有一个问题,我不想使用 GET 来检索数据。我想使用 URL 名称,所以我可以这样做:RewriteRule ^products/([^/.]+)/?$ /out/of/pub/root/templates/products.php [L] 加载我帖子中所述的文件(分解 url 并将其传递给其他东西)?
猜你喜欢
  • 2012-06-02
  • 2017-03-24
  • 1970-01-01
  • 1970-01-01
  • 2020-04-20
  • 2020-06-27
  • 2020-10-31
  • 2016-10-28
  • 2018-11-22
相关资源
最近更新 更多