【问题标题】:Replacing Rewrited urls from DB fields in PHP从 PHP 中的 DB 字段替换重写的 url
【发布时间】:2011-06-10 13:59:39
【问题描述】:

我的环境是 Apache,DB 是 mySQL,语言是 PHP。

我需要创建一个中间层来拦截请求并检查诸如"http://www.something.com/apple/ipad-2-cases/" 之类的url,然后查找数据库,appleipad-2-cases 都有一个计数器,如下所示:

产品表

  1. p_id --> 1
  2. p_name --> “iPad”
  3. p_custom_url --> “ipad-2-cases”

品牌表

  1. b_id --> 2
  2. b_name --> “苹果”
  3. b_custom_url --> “苹果”

并将网址转换为"http://www.something.com/products.php?b_id=2&p_id=1",我可以从中获取b_idp_id 以显示适当的产品信息。

它基本上看起来很像Joomla 中实现的方式。您可以通过键入额外字段来定义自己的用户友好 url,否则无论如何它都会实现默认设置。

由于我是 PHP 新手,我不太清楚如何完成此操作。在 asp.net 中,我一直在使用 URL-Writer 库,它使用 HttpHandlersHttpModules 来拦截当前请求并进行适当的替换。

是否有任何图书馆或其他东西可以帮助我解决这个问题?还是我需要使用.htaccess(我知道我需要在.htaccess上打开mod_urlwrite

非常感谢。

【问题讨论】:

标签: php url-rewriting


【解决方案1】:

使用名称代替 id。

在 .htaccess 中使用 mod_rewrite 从

http://www.something.com/apple/ipad-2-cases/ 

http://www.something.com/products.php?b=apple&p=ipad-2-cases

并在 products.php 中找到相关的 id

编辑
在 .htaccess 中创建这样的规则:

RewriteRule ^[^/]+/([A-Za-z_-]+)/([A-Za-z_-]+)$ products.php?b=$1&p=$2 

【讨论】:

  • 名称可能不是唯一的,这给我带来了问题,但似乎是个好主意,但它仍然不是答案;)
  • 而且我在这里谈论的是数千种产品,编写所有这些需要相当长的时间,并且为这样的大量产品解析 .htaccess 可能需要时间并导致响应时间变慢。
  • 不,只是在 .htaccess 中创建一个规则。现在检查我的答案。至于唯一性 - 你必须确保这一点。
猜你喜欢
  • 2016-01-31
  • 1970-01-01
  • 2015-08-25
  • 2011-10-13
  • 1970-01-01
  • 2012-12-01
  • 1970-01-01
  • 2016-01-11
  • 1970-01-01
相关资源
最近更新 更多