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

标签 php url-rewriting url-shortener

我的文档根目录:

/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/

相关文章:

asp.net-mvc - ASP.NET URL 包含多个 "dot"符号

seo - 如何使用 robots.txt 阻止用于 URL 缩短服务的子域?

php - 保存数据库存储或保存访问多个表的查询?

javascript - 在action.php 的表单之外定位按钮?

r - 对一组 URL 发出并发 RCurl GET 请求

java - 如何在NGINX反向代理后面运行 "Eclipse Che"?

javascript - jQuery 动态 URL 缩短器

url - 如何使用 Bilty API 缩短 URL 列表?

php - 获取表单中选择框的值

php - 如何使用 DB insert 将 boolean 值 "false"插入为 0?