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


url rewriting - PHP: Resolve Internal File Path using Shortened URL

My doroot:

/var/www/项目/模板/index . html
/var/www/project/templates/about.html
/var/www/project/templates/contact.html
/var/www/project/templates/press/2013/01/01/mypresspost1
/var/www/project/templates/press/2013/01/02/mypresspost2
/var/www/project/templates/blog/2013/01/01/myblogpost1
/var/www/project/templates/blog/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

由于您将有动态创建的条目,因此我将对mysql表执行此操作。在创建"别名"时:

  • 创建标题别名,删除特殊字符等。空格变成下划线…等。
  • 检查是否已经存在该字符串的别名
  • 如果是,在末尾放置-1,再次检查,如果它仍然存在,则增加数字直到找到唯一的。
  • 保存别名和目的地
  • 我认为你有一个唯一的ID,所以存储这个ID,因为可能你改变了日期和目的地url不一样。
  • 在。htaccess中,应该清楚的是,你需要重写所有传入的请求到一个特定的文件,如果它是别名,检查字符串。
  • 如果是这样,你得到了唯一的ID从"页面",然后你可以重定向与位置头通过读出日期的帖子和构建与此信息的实际url。
  • 将缓存这个"构建",以便不丢失性能。