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.