我正在尝试开发一个与Django实践的URL缩短应用程序。我不明白如何才能为每个长URL创建唯一的字符串以用作短URL。就像其他流行的URL缩写工具一样。我该怎么做呢?可以使所有短urls的长度相同吗?
发布于 2010-11-01 04:28:35
正如苏格曼所说,这很简单,您只需创建一个哈希表。
有动态的方法可以做到这一点,但最简单和最有效的是在数据库中有一个包含2个字段的表,其中包含hashkey和完整的url。然后,您的服务器(如Apache )将有能力重定向到正确的页面。
是的,在一定程度上,但是一旦你达到最大数量的关键字,你将不得不重新使用/替换短的url IDs。当您设置固定长度时,您将限制possibilities.的数量
我要问你的是:
我假设你说的URL shortener
指的是像jsFiddle或粘贴盒这样的东西,因为他们有像http://jsfiddle.net/sdfj2/
这样的东西。否则,我们需要更多的澄清。
发布于 2010-11-01 04:29:13
您可能希望创建一个简单的数据库表,将一个短值映射到一个URL。
您可以生成的最简单的短url只是一个序列号或自动增量列(将第一个值指定为1,然后是2,依此类推)。
可以让所有URL的长度都一样长,直到你不会用完相同长度的值,例如,如果你只使用数字(作为一个简单的例子),它将是从0000到9999。
神奇之处在于,你可以使用mod_rewrite将url作为参数传递给你的脚本,让你的应用程序在数据库中查找该值,然后重定向用户。
mod_rewrite的这个重写规则将接受一个类似example.com/0000的URL并重定向到example.com/index.py?id=0000您可以将其放入.htaccess (我假设您使用的是apache)。
您的应用程序只是读取id并重定向到关联的页面。
RewriteRule ^([0-9]+)/?$ index.py?id=$1 [QSA,L]
如果您决定使用散列或简单的base64序列号(这将是一个更紧凑的自动增量),它看起来会略有不同:
RewriteRule ^(.*)/?$ index.py?id=$1 [QSA,L]
发布于 2010-11-02 12:00:31
我写了上面链接的博客文章。基本上,我是如何做到这一点的:
将长url存储在具有自动递增索引字段的表中。检索索引。将其转换为字符串,与将其转换为十六进制或八进制数字的方式相同,但使用所有可用的字符作为“数字”。例如,假设我们有a-z、A-Z和0-9可用,请执行以下操作:
0=0 1=1 ... 9=9 10 =a 11 =b ... 35 =z 36 =A 37 =B ... 60 =Z 61 = 10 62 = 11 ... 70 = 19 71 = 1a 72 = 1b
你明白模式了吗?这是一种从基数10到基数n的通用转换算法,其中n是要处理的字符数。
https://stackoverflow.com/questions/4066601
复制相似问题