The following code is what I used in the construction of
Gotocity.com. My goal was, as I mentioned, to eliminate all
'?' and '&' characters from the URL. I wanted to drill down
from the general (country, in this case the US) to the specific
(a given topic page in a given city in the country specified).
Fortunately, all cities in the US are given a unique identifier, a
ZIP code, and each city also resides in a state. So you can drill
from Country -> state -> city -> topic page in a logical fashion.
The important thing to note is that, if you're viewing a "country" page,
then the 'state' won't be present in the URL. If you're viewing a 'state'
page, both 'country' and 'state' are in the url, so you can use both
as criteria when you select from the database.
The URL string is set up in a global variable called $REQUEST_URI. All
you have to do is examine the string and figure out where you're at. I do
that by explode()'ing the string using the / separator.
<?php
/*
Sample URLs:
/local/2/us/IA/a/50613/apartment/ - apartments in Cedar Falls, IA
/local/2/us/IA/a/ - group of cities in Iowa
/local/2/us/ - States in the US
/local/1/us/IA/a/50301/ - Des Moines City.net
*/
$url_array=explode("/",$REQUEST_URI); //BREAK UP THE URL PATH
// USING '/' as delimiter
$url_affil_num=$url_array[2]; //Co-Branding info
$url_country=$url_array[3]; //Which Country?
$url_state=$url_array[4]; //Which State?
$url_alpha_state=$url_array[5]; //Cities starting with a-g
$url_zip=$url_array[6]; //If present, build thispage
$url_content=$url_array[7]; //If present, build a sub-
// page for this city
/*
separate includes were designed to fetch the affiliate cobranding
and build appropriate style sheets on the fly. Data validation is
done prior to each query. If a URL is incorrect, bow out gracefully
or redirect home
*/
if($url_zip) {
/*
If present, query the Zip code database and build the page.
Inside the city.inc, we will check for which "content page"
we are building, if any.
*/
} elseif ($url_state) {
/*
If URL PATH ends here, query Zip code database,
selecting DISTINCT cities in this state
*/
} elseif ($url_country) {
/*
If URL PATH ends here, query ZIP code database,
selecting DISTINCT states for this country
*/