Main Content

Using different URLs to navigate around a single script

Archive - Originally posted on "The Horse's Mouth" - 2006-06-11 07:07:49 - Graham Ellis

1. I want my website to have different URLs for each of my content pages so that users can easily bookmark pages, pass them on to friends and contacts easily and with confidence, and search engines can register and handle each as its own distinct page

but

2. I want most of the pages on my website to be provided by the same script, so that I can maintain a single piece of code that brings in variable content as required.

Requirements (1) and (2) may appear to conflict at first, but in reality they don't. Multiple URLs can be mapped onto a single script using Apache httpd's mod_rewrite (guide, reference). And that way, you can get the best of both worlds.

Mod_rewrite is very powerful; we use it in many places on our web site and on client web sites, and the casual website visitor hasn't a clue that it's in use. Because it's very powerful and flexible, though, the documentation can be a bit longwinded to wade through and it's often hard to see the wood for the trees. So here's an example:

In the .htaccess file in a directory called /boutique

RewriteEngine On
RewriteRule ^([^/]*)/([^.]*)\.html$ demo.php?andy=&graham=
RewriteRule ^([^/]*)\.html$ demo.php?toplevel=


Any top level .html requests are mapped to the script with a "toplevel" parameter as if one box on a form had been completed (that's the second rule). And .html requests that appear to be in subdirectories are mapped to the same script with parameters called "andy" and "graham" as if each of those elements had been entered into a form.

I've put up a live script on our save the train site under a subdirectory called boutique. Try out the following URLs:
http://www.savethetrain.org.uk/boutique/clothing.html
http://www.savethetrain.org.uk/boutique/clothing/trousers.html
http://www.savethetrain.org.uk/boutique/clothing/hats.html

The script source code is available here, the .htaccess file source is here, and training is available here