I use a similar rewrite and, right or wrong, this is basically what I do. In both cases, your $_SERVER
array should have one or more of these values:
[REQUEST_URI] => /article/18/
[QUERY_STRING] => article/18/
[REDIRECT_URL] => /article/18/
[REDIRECT_QUERY_STRING] => article/18/
[SCRIPT_URL] => /article/18/
[REDIRECT_SCRIPT_URL] => /article/18/
For me, I would have the path of deliberate pages (like an "about us" page or whatever) saved in a database in order to be able to look it up using the path, but if not there, as in this case, then you deal with the path further:
# Assign one of the server paths that is most reliable
$path = $_SERVER['REDIRECT_URL'];
# Check if there is a path that matches a database path
$valid = $this->query("SELECT COUNT(*) AS count FROM `pages` WHERE `path` = ?",array($path))->getResults();
# If there is a page that is in the database, show that one
# Presumably this is what you mean by content and id programmically, ie.
# it's a pre-designated page, not an article that needs to be broken down
# but follows the same path pattern?
if($valid['count'] == 1) {
# Go about doing normal stuff
# Stop by using die(), exit, or if in function/method, return
# Idea is to stop at this stage of the script if successful
}
else {
# Explode the query
$parts = array_filter(explode('/',$path));
# Check if both parts exist
if(isset($parts[0]) && isset($parts[1])) {
# Assign type
$type = $parts[0];
# Assign ID
$id = $parts[1];
# Fetch the results (you'll want to sanitize or match from an array the $type value to avoid injection)
$page = $this->query("SELECT * FROM `{$type}` WHERE `ID` = ?",array($id))->getResults();
# Check if page is valid and display
# Stop by using die(), exit, or if in function/method, return
}
}
# Send a 404 header and display a not found
# Make the last thing happen show a 404 page by default
Anyway, this is basically what I do, but you can probably do a rewrite that will handle both scenarios from the htaccess
file. I personally just have the one that funnels everything and I deal with the path and routing using PHP, then I don't have to create some user control to mess with editing the htaccess
file if different scenarios are required down the line.