Make your own url shorten service

Pluralsight courses
LinkedIn Premium uses PayScale to estimate job salaries

Premium (Not Free) Video Tutorials

Free Video Tutorials & Free Tools

Original Post By : Sean-O.com

Requirements

  • Web Server — preferably one you host yourself, with control over basic site settings
  • Web Development Language — using PHP here, but this code can be adapted to ASP.NET, ColdFusion, etc.
  • Database — MySQL featured, but SQL Server, PostgreSQL, etc. would work
  • Ideally, you’ll want a short domain to set this up on.
    www.joesautoglassandspareparts.com kinda defeats the purpose ;)

Examples

Each of the following are short URLs to content on other sites:
http://sean-o.com/babysafe

http://sean-o.com/getwindows7

http://sean-o.com/playtime

Getting Started

As mentioned above, we’ll be using PHP 5.2.x & MySQL 4/5 for this tutorial — as these open-source technologies should be available to most of you.

The first thing you’ll need is a source for your short URLs. Easiest way to do that is with a MySQL database (or new table on your existing site’s database). Here’s the structure I used:

Sean O's Short URL Tutorial: Table Structure

Sean O's Short URL Tutorial: Table Structure

You only really need the first three columns, the rest are for statistics & future use (userID). Add/remove fields as you see fit — perhaps you may want a field for notes?

The Script

We’ll only need one script to accomplish the short URL resolution. Create a file called shortURL.php at the root of your site. (or you may choose a custom name & path)

To begin, the first thing to do is grab the short URL — the segment after the base URL.
e.g. http://sean-o.com/playtime
A little regex (regular expressions) goes a long way here to parse the short URL and strip extraneous characters.

 PHP |  copy code |? 
$expectedURL = trim($_SERVER['URL']);
$split = preg_split("{:80\/}",$expectedURL);
$shortURL = $split[1];
// security: strip all but alphanumerics & dashes
$shortURL = preg_replace("/[^a-z0-9-]+/i", "", $shortURL);

Next, we’ll check this string to see if it matches a short URL in our database.

 PHP |  copy code |? 
$isShortURL = false;
$result = getLongURL($shortURL);
if ($result) { $isShortURL = true; }
$longURL = $result['longURL'];

Finally, we check to see if our $isShortURL flag is set. If a matching short URL was found, we’ll redirect to it. If not, we’ll display our standard 404.

 PHP |  copy code |? 
if ($isShortURL)
{
	redirectTo($longURL, $shortURL);
} else {
	show404();  // no shortURL found, display standard 404 page
}

The Functions

The primary function — get the long URL associated with the passed short URL, if it exists.

 PHP |  copy code |? 
function getLongURL($s)
{
	// define these variables for your system
	$host = ""; $user = ""; $pass = ""; $db = "";
	$mysqli = new mysqli($host, $user, $pass, $db);
	// you may just want to fall thru to 404 here if connection error
	if (mysqli_connect_errno()) { die("Unable to connect !"); }
	$query = "SELECT * FROM urls WHERE shorturl = '$s';";
	if ($result = $mysqli->query($query)) {
	    if ($result->num_rows > 0) {
		while($row = $result->fetch_assoc()) {
			return($row);
		}
	    } else {
	    	return false;
	    }
	} else {
		return false;
	}
	$mysqli->close();
}

Perform the URL redirection.

 PHP |  copy code |? 
function redirectTo($longURL)
{
	// change this to your domain
	header("Referer: http://www.your-domain-here.com");
	// use a 301 redirect to your destination
	header("Location: $longURL", TRUE, 301);
	exit;
}

Finally, display your standard 404 page here.

 PHP |  copy code |? 
function show404()
{
	// display/include your standard 404 page here
	echo "

404 Page Not Found."; exit; }

Wire It Up

Okay, so we have the script… now what? Well, the “special sauce” here is the 404 redirect. What we’re simply doing is replacing (or augmenting) your site’s 404 page with one that checks a database for a URL shortcut. If one is listed that matches, redirect to it. If not, display your standard (or not so standard) 404 error message.

You’ll need to modify your site’s existing 404 error page, or (recommended) create a new one. If creating a new one, make sure your site is set to point to this file. For IIS (5/6): Go to your web site, Properties, Custom Errors, 404, Edit Properties… For Apache, edit your .htaccess file thusly: ErrorDocument 404 /shortURL.php. (replace with your custom path as appropriate)

Now, Run With It (Additional, Optional Steps)

If you’ll be using this with any regularity, you’ll probably want to create an admin panel page to quickly add & manage your URLs (I’m simply using a MySQL GUI — the great HeidiSQL). Consider whether you want to use custom short URL names, or just generate a random 4-5 character string (or both!). If you’re a statistics nut, you might want to capture more than just the user’s IP and/or build a stats page.

If you’re looking to “monetize” (ahem, see above), you may want to frame the linked site under a toolbar with your site’s branding, a la the “Digg Bar”. I highly recommend against this, however, as many users consider this practice an annoyance.

If your domain name is longer than, say, 8 characters, consider purchasing a second domain for exclusive short URL serving. Two-letter country-based domains such as .ly and .to are popular. Flickr’s recent purchase of http://flic.kr was especially clever.

Conclusion

So there you have it. Your very own, shiny new, URL shortening service… in under 50 lines of code!

Be sure to test. I suggest trying the following: a short URL you’ve created, a known working URL on your site (make sure you didn’t break anything!), and a known incorrect URL (test the standard 404). Also, be mindful of the security implications. Make sure following best practices with regards to MySQL security, and be sure to sanitize all URLs. Ensure your server is running the latest versions of software with the latest patches.

Disclaimer: This article is just to get you started. The code presented here is most certainly “quick & dirty”, and can surely be optimized. This code may or may not work for you, and I cannot be held responsible for any damage that may occur to your site as a result of implementing this. 

Related posts:

  1. Absolute and Relative path for beginners When you're creating links to documents and images on the...
  2. What is MySQL? A Visual Definition MySQL is an RDBMS (relational database) that is used in...
  3. What is SQL? What is SQL? SQL stands for Structured Query Language and...

Related posts brought to you by Yet Another Related Posts Plugin.

Speak Your Mind

Tell us what you're thinking...
and oh, if you want a pic to show with your comment, go get a gravatar!

Powered by WP Hashcash

This blog uses the cross-linker plugin developed by Web-Developers.Net