我正在开发一个使用PHP,MySQL和Apache的URL缩短网站。在我看开源项目时,URL缩短的一般概念:用户提供URL链接,系统从数据库获取该链接的ID。然后转换ID X基本系统(我使用基数36)。然后使用Apache mod_rewrite并创建缩短的URL然后重定向。所有的URL缩短网站都是这样工作还是使用不同于此的其他算法?还有什么想法与其他网址缩短系统有所区别吗?
答案 0 :(得分:4)
我认为你的方式非常正确。
但是,我不会像你说的那样做,关于这一部分:
然后使用apache mod_rewrite并创建 缩短网址然后重定向。
我认为我不会创建Apache RewriteRule,也不会使用mod_rewrite
。
收到短网址时,如short.com/MYID
,我会:
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的。
来自about页面:
YOURLS是一小组PHP脚本,可让您运行自己的URL缩短服务(la TinyURL)。您可以将其设为私有或公开,您可以选择自定义关键字网址,它附带自己的API。