开发URL Shortener

Use*_*ser 10 django url url-shortener

我正在尝试使用Django开发一个URL缩短器应用程序.我不明白如何为每个长URL创建唯一字符串以用作短URL.像其他流行的URL缩短程序一样.我怎样才能做到这一点?是否可以制作相同长度的所有短网址?

vol*_*ron 12

  1. 我不明白如何为每个长URL创建唯一字符串以用作短URL.像其他流行的URL缩短程序一样.
    正如sugerman所说,这很简单,你只需要创建一个哈希表.

  2. 我怎样才能做到这一点?
    有动态的方法可以做到这一点,但最简单和最有效的方法是在数据库中有一个2字段表,它包含hashkey和完整的url.然后,您的服务器(如Apache)将能够重定向到正确的页面.

  3. 是否可以制作相同长度的所有短网址?
    是的,在某种程度上,一旦达到最大密钥数量,就必须重新使用/替换短网址ID.当你设置一个固定长度,那么你就限制了可能性.

我向你提问:

我假设URL shortener你指的是像jsFiddle或者pastebin这样的东西,因为它们有类似的东西http://jsfiddle.net/sdfj2/.否则,我们需要进一步澄清.

  • 答案提到了哈希表.考虑到周围有多少个URL,我建议使用大哈希来避免冲突(类似于SHA512).但是,由于这不会完全缩短,base64会对您的哈希进行编码.它是完全可逆的,所以让它们退出桌面是一件轻而易举的事,它可以很好地缩短为一个URL合法的字符集. (3认同)
  • 而不是使用像md5/sha这样的散列函数,它只是增量更容易.[0-9a-zA-Z] +任何其他可接受的字符(例如" - "),只需在列表中递增.您不希望使用单向加密来重复使用相同的密钥两次,这可能会搞砸.更重要的是你保持简短的方法(短期是明显的目标).jsfiddle将非匿名用户名添加到url:`jsfiddle.net/user/sdf2s /`然后他们跟着它修改的数字计数. (3认同)

Kev*_*ker 9

您可能希望创建一个简单的db表,将短值映射到URL.

您可以生成的最简单的短网址只是序列号或自动增量列(分配第一个值1,然后是2,依此类推)

可以使所有相同长度的URL长度不等,直到您没有用完相同长度的值,例如,如果您只使用数字(作为一个简单示例),它将从0000到9999.

神奇的部分是你可以使用mod_rewrite将url作为参数传递给你的脚本,让你的应用程序在db中查看值,然后重定向用户.

这个mod_rewrite的重写规则将采用像example.com/0000这样的URL并重定向到example.com/index.py?id=0000你会把它放在.htaccess中(我假设你正在使用apache.)

您的应用程序只读取ID并重定向到关联的页面.

RewriteRule ^([0-9]+)/?$ index.py?id=$1 [QSA,L]
Run Code Online (Sandbox Code Playgroud)

如果您决定使用散列或简单的base64序列号(这将是一个更紧凑的自动增量),它看起来会略有不同:

RewriteRule ^(.*)/?$ index.py?id=$1 [QSA,L]
Run Code Online (Sandbox Code Playgroud)