3

我的文档根:

/var/www/project/templates/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

假设我已经有了myblogpost2从 URI 中获取字符串的方法。
现在这只是解决内部路径的问题,所以我可以设置$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
4

1 回答 1

0

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

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