我的文档根目录:
/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}"}
我的 Bootstrap :
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,那么您可以通过读出帖子的日期来使用位置 header 进行重定向,并使用此信息构建实际的 url。
- 将缓存此“构建”以避免性能下降。
关于PHP:使用缩短的 URL 解析内部文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14180331/