PHP:使用缩短的URL解析内部文件路径

时间:2013-01-06 07:45:17

标签: php url-rewriting url-shortener

我的DocRoot:

/var/www/project/templates/index.html
/var/www/project/templates/about.html
/var/www/project/templates/contact.html
在/ var / WWW /项目/模板/新闻/ 2013/01/01 / mypresspost1
在/ var / WWW /项目/模板/新闻/ 2013/01/02 / mypresspost2
在/ var / WWW /项目/模板/博客/ 2013/01/01 / myblogpost1
在/ var / WWW /项目/模板/博客/ 2013/01/02 / myblogpost2

目标:

使用缩短的URL查找内部文件路径 因此,如果我点击mysite.com/myblogpost2,我实际上会加载/blog/2013/01/02/myblogpost2 我正在使用模板引擎,因此路径可以在前端使用,如:{include file="{$path}"}

我的引导程序:

RewriteCond %{REQUEST_URI} !=/index.php
RewriteRule .* /index.php

假设我已经有了一种从URI中获取myblogpost2字符串的方法 现在这只是解决内部路径的问题,因此我可以设置$path

思路:

我有几个想法,这些只是为了更好地说明我的问题。
最终我正在寻找最好的路线,所以欢迎任何建议。

使用平面文件中的JSON:

{
    "myblogpost1":   {longpath:"/blog/2013/01/01/myblogpost1"},
    "myblogpost2":   {longpath:"/blog/2013/01/02/myblogpost2"}
}

$string = "myblogpost1";
$path = objJsonResp[$string]->longpath;

查询表格

$path = SELECT longPath FROM shortUrls WHERE name = :name

1 个答案:

答案 0 :(得分:0)

由于您将拥有动态创建的条目,我将使用mysql表执行此操作。 在创建“别名”:

  • 创建标题的别名,删除特殊字符等。下划线的空间......等等。
  • 检查是否已存在该字符串的别名
  • 如果是这样,在最后放置一个-1,再次检查,如果它仍然存在,则增加该数字,直到找到一个唯一的数字。
  • 保存别名和目的地。
  • 我认为您有一个唯一的ID,因此请存储此ID,因为您可能更改了日期,目标网址与原来的网址不同。
  • 在.htaccess中,应该清楚您需要将所有传入请求重写为特定文件,如果它是别名,则检查该字符串。
  • 如果是这样,您从该“页面”获得了唯一的ID,那么您可以通过读取帖子的日期来重定向位置标题,并使用此信息构建实际网址。
  • 会缓存这种“积累”,以免失去性能。