简单实现tinyurl.com类短网址服务
May 10th, 2009 | by vvoody |常用Twitter或者饭否之类服务的朋友都应该知道tinyurl的大名吧~ 简言之就是将长长的网址缩短,变成这个样子:http://tinyurl.com/qn8v7y
如果在自个儿的域名上实现一下类似的服务,应该很好玩~ 现在我已经做好了,只需4个文件配合即可工作,有兴趣的朋友可以继续往下看。测试方法,在浏览器中输入 http://vvoody.org/cmprzurl.py?longurl=http://vvoody.org/blog/?p=265 ,在longurl=后添上你想缩短的地址即可得到一个短网址。这篇文章缩短后的地址就是:http://vvoody.org/baJjPy 哈哈真巧,Py 结尾!

原理看下图:

点击看大图
关键在于.htaccess规则,它负责重写地址。比如我的域名 http://vvoody.org/ 下面有 blog 等目录和文件,得保证这些能正常访问,也得把 3pHj9A 这样的字符串交给后台脚本处理。这个.htaccess规则之前我写了一堆正则,却都无法满足上述要求,后来在这篇文章中找到了方法,就两条,Apache 很好很强大!
curl -I http://vvoody.org/baJjPy 可以看到 Location 头部已经是转向网址了。不过返回的http头信息不是转向网站的,虽然不影响转向,但总觉得不太好。这方面我实在不懂,希望有朋友能帮我解决这个问题
服务器端要求:
* Apache 2.0 以上并支持.htaccess和python cgi; [2.0.63]
* SQLite3; [3.2.1]
* Python; [2.3.5]
* pysqlite2 或 sqlite3 Python模块; [??]
方括号里是我的服务器端情况。
总结:
由于后端程序采用CGI的方式(非mod_python),使用 SQLite 这种非C/S数据库,以及我对web编程和数据库操作方面知识很浅,因此在性能、并发处理上不会达到很高的要求。
这个东西仅仅是给自个儿玩啦
路过大牛轻拍,也欢迎指点任何程序设计、安全、配置等上的问题。
如果你也有自己的域名和空间,那么只要把上图中的 cmprzurl.py, redirect.py, cmprzurl.db, .htaccess 复制到你域名的根目录下,赋上可执行权限,就可以了。文件请从下面的地址检出。
PS:
Google docs 里的 drawing 真好用啊~~
1 Trackback(s)