Herman J. Radtke III

Read more of my blog or subscribe to my feed.

Scaling URL's

Written by Herman J. Radtke III on 15 Nov 2009

Using non-relative URL's during early development can alleviate a lot of growing pains. This may seem counter-intuitive at first, but hear me out. We all learned long ago to stop hard-coding the domain name into the href attribute of an anchor tag. Instead, we used relative URL's such as '/index.php' to make our code much more portable. However, relative URL's become a pain point when trying to scale your website. Let's review some common scenarios that can be averted with some proper planning. Common scenario's:
  1. The time comes for a CDN and all images need to be served up with a URL like cdn.example.com.
  2. The use of SSL is very common for authentication and other sensitive user information. The problem is that SSL is much slower than a normal http request. Traffic needs to be segregated by changing the SSL URL's from https://www.example.com to https://secure.example.com.
The solution to these problems is quite trivial: simply prepend a domain to a relative URL. Consider the following config file:
site.cdn = "http://dev.example.com"
site.ssl = "https://dev.example.com"

site.cdn = "http://cdn.example.com"
site.ssl = "https://secure.example.com"
This configuration uses special URL values for a production environment, but uses the standard development server URL so the developers can still develop. A simple addition to the php bootstrap file can set up defines to use in html templates.
define('SSL', $config->site->ssl);
And then in a .phtml file you can simply do the following:

Consider prepending the domain for all URL's in your application, not just those types listed above. There are plenty of scenario's that may require AJAX calls or even normal GET/POST request to use different domains.