By no means am I the first to write about this, but, hey – it’s my blog, and I can write what I want, right?
h3. What I’m at today
I set about rewriting my very first commercial site; four whole years ago… And while looking at it now with an eye for standards and all that jazz I really don’t like it. But then, I didn’t like the first three designs for this site either… Have a look at the site, here.
I’m doing the site in PHP, not because I want to, but because I know it better than Rails and I really want to get my stack of projects cleared and get on with things…
So… I wanted to help along the SEO for the site, to give it user and indeed machine-friendly URLs. As far as I know there are a few ways to do this. Through .htaccess or through the server-side language of choice. I chose .htaccess because it provides a central point of reference; means I don’t have to write “preg_replace” six hundred times; and so on.
h3. Here’s what I want:
My site sections will be as follows.
My untidy nasty url looks like this:
What I want it to look like is this:
h3. Here’s what I’ll do:
The RewriteRule and a bit of ^, & and $.
RewriteRule ^gardens/([0-9])$ gardens/$1/
RewriteRule ^gardens/([0-9])/$ index.php?section=4&page=$1
RewriteRule is the command which takes the first string and processes it into the second. ^ and $ delimit the first string and the remainder is the second. [0-9] means that you have a number. In the same way [a-z] would be a smallcase letter and [A-Z] would be a capital.
h3. A quick lesson in Reg Exps
Through being ‘required’ to use stuff like Vi at work I’ve had to learn some regexps to make life more managable!
* [0-9] Number
* [a-z] Letter (smallcase)
* [A-Z] Letter (CAPS)
* [a-Z] Letter (any)
* [0-9]+ Series of numbers (+ is applicable to a,z etc as well as 0-9s.)
Just in case you missed it: to have gardens/536 (If I wanted 536 pages of garden content…) then I would need to replace
^gardens/([0-9])$ with ^gardens/([0-9]+)$
This will of course allow gardens/1231231 if some viewer wants to be smart, but that’s what error handling’s for. Isn’t it?