【问题标题】:URL Shortening Site网址缩短网站
【发布时间】:2010-11-25 20:54:07
【问题描述】:

我正在开发一个使用 PHP、MySQL 和 Apache 的 URL 缩短站点。当我查看开源项目时,URL 缩短的一般概念:用户提供一个 URL 链接,系统从数据库中获取该链接的 ID。然后转换 ID X 基系统(我使用的是 36 基)。然后使用 Apache mod_rewrite 并创建缩短的 URL,然后重定向。所有的 URL 缩短网站都是这样工作的,还是有些网站使用了不同的算法?以及与其他 URL 缩短系统有所不同的任何想法?

【问题讨论】:

  • 你要问的问题是:你为什么要做另一个网址缩短网站?如果您想制作与已经存在的完全相同的东西,那似乎是在浪费时间。另一方面,如果您想做一些不同的事情,那么只有您知道那是什么。
  • 我想添加更多功能,例如 1-firefox 插件 2-自动复制剪贴板 3-发布到美味的网站 4-我正在考虑使用 google 安全浏览集成
  • 我认为没有理由不重新创建轮子,因为最终您已经学会了如何构建自己的轮子。
  • 进入项目的第一个原因是学习缩短 url 的过程,我认为创建另一个以相同方式工作的系统没有什么坏处,如果它的服务很好,为什么不像比特一样出名。具有附加功能的 ly 或 tinyurl。

标签: php mysql algorithm apache url-rewriting


【解决方案1】:

我认为你走对了。

不过,我不会像你说的那样做这部分:

然后使用 apache mod_rewrite 并创建 缩短网址,然后重定向。

我认为我不会创建 Apache RewriteRule,也不会使用 mod_rewrite


当收到一个短网址时,比如short.com/MYID,Id 会:

  • 将“MYID”部分解密为DB中的id号
  • 从数据库中获取 URL
  • 只需从某些服务器代码(如 PHP,使用 header 函数)重定向到该 URL

我猜有点像这样:

// fetch $urlFull from DB (corresponding to the MYID received in GET)
header('HTTP/1.x 301 Moved Permanently');
header('Location: ' . $urlFull);
die;


(编辑)如果 mod_rewrite 您的意思是“将 short.com/MYID 转换为 short.com/id=MYID”,哦,是的,在这种情况下,当然!

顺便说一句,我在我的一个网站上使用了类似的东西:

RewriteEngine on
RewriteCond %{REQUEST_URI}  !^/index.php
RewriteRule ^(.*)$ /index.php?hash=$1   [L]


希望这会有所帮助:-)

【讨论】:

    【解决方案2】:

    你可以使用bit.ly(推特使用这个)。您可以使用一些 API 来调用和获取缩短的 URL。

    也说说缩短网址,你可以简单地使用这样的表格

    CREATE TABLE `urls` (
      `id` varchar(255) NOT NULL default '',
      `url` text NOT NULL default '',
      PRIMARY KEY  (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    

    您可以将id(以 36 为基数,以防止 32 位整数耗尽)作为缩短的 id - http://host/?id

    当您调用 URL http://host/?As2dD24B 时,它会查找匹配的 ID 和 URL,然后重定向到该 URL。简单吗?

    另外请记住,您可以扩展基数 36。我假设您的基数 36 是: a-z 和 0-9。您可以添加 A-Z(另外 26 个)和其他符号(例如 ?,:*&^%$#@)。

    【讨论】:

      【解决方案3】:

      如果您想做一些与其他 URL 缩短网站不同的事情,请想办法确保在您的网站消失后链接不会中断!我不知道该怎么做,我认为这可能是不可能的......

      【讨论】:

      • 您可以使用弹性 IP 在 Amazon EC2 上设置您的服务器。这将提供良好的负载平衡。
      【解决方案4】:

      只是一个安全注意事项:如果它不在您的控制/域之下,请不要从缩短的 url 直接重定向到该站点 - 有一个登录页面,用户可以在其中看到实际的 url 并决定是否继续...

      【讨论】:

      • 并确保访问者可以将网站标记为垃圾邮件。
      • 这对我来说破坏了一个更短的 URL。允许添加选项?链接以获取其详细信息 - 类似于 br.st 和 bit.ly
      • 好吧,仅仅加载一个网站可能会毁了你的一天/计算机,我们应该教用户首先查看 URL 并尝试弄清楚它是否是他们想要的......听起来可能很偏执,但很多的攻击基于将用户定向到恶意网站。
      • 能够将链接标记为垃圾邮件是个好主意,但是暂停该过程?这只是个坏主意.. 会减慢系统速度,并使用户体验不太理想
      • TinyURL 应请求将在您的计算机上放置一个 cookie,它会解析并为您提供预览作为选择加入...我仍然认为在没有目标域预览的情况下重定向是完全疯狂的安全方面 - 但我猜用户很懒:/
      【解决方案5】:

      【讨论】:

        【解决方案6】:

        我建议使用 YOURLS,它是一个强大的开源软件包来完成此任务。它基于 PHP/MySQL。

        http://yourls.org/#Install

        来自关于页面:

        YOURLS 是一小组 PHP 脚本,可让您运行自己的 URL 缩短服务(La TinyURL)。您可以将其设为私有或公开,您可以选择自定义关键字 URL,它带有自己的 API。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多