网址缩短网站

时间:2009-09-05 11:48:00

标签: php mysql algorithm apache url-rewriting

我正在开发一个使用PHP,MySQL和Apache的URL缩短网站。在我看开源项目时,URL缩短的一般概念:用户提供URL链接,系统从数据库获取该链接的ID。然后转换ID X基本系统(我使用基数36)。然后使用Apache mod_rewrite并创建缩短的URL然后重定向。所有的URL缩短网站都是这样工作还是使用不同于此的其他算法?还有什么想法与其他网址缩短系统有所区别吗?

6 个答案:

答案 0 :(得分:4)

我认为你的方式非常正确。

但是,我不会像你说的那样做,关于这一部分:

  

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

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


收到短网址时,如short.com/MYID,我会:

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

有点像这样我想:

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


希望这会有所帮助: - )

答案 1 :(得分:3)

您可以使用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

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

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

答案 2 :(得分:2)

如果您想要与其他网址缩短网站做一些不同的事情,请找出一种方法,确保在您的网站消失时链接不会中断!我不知道怎么做,我想这可能是不可能的......

答案 3 :(得分:2)

只是一个安全说明:如果不在您的控制/域下,请不要从缩短的网址直接重定向到该网站 - 有一个目标网页,用户可以看到实际的网址并决定是否继续...

答案 4 :(得分:2)

答案 5 :(得分:0)

我建议使用YOURLS这是一个强大的开源软件包来做到这一点。这是基于PHP / MySQL的。

http://yourls.org/#Install

来自about页面:

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