22
For anyone who is interested. This is how I implemented a clean URL structure before and what I'm attempting to hack into xoops.
.htaccess file I have following
RewriteEngine On
# If they are looking for index.php we're done
RewriteRule ^(index.php.*) $1 [L]
# If they are looking for a file with a file extension let them get at it
RewriteRule ^(.*..+)$ $1 [L]
# Otherwise send their request to index.php
RewriteRule ^(.*)$ index.php?query=$1 [L]
Then I include the following script which basically takes whatever is stuck in the URL and sticks it in an array called $page_query
global $REQUEST_URI;
global $SCRIPT_NAME;
$base_href = $SCRIPT_NAME;
$path = explode("/",$base_href);
$template = array_pop ($path);
$path = implode ("/",$path);
$vars = str_replace($SCRIPT_NAME, "", $REQUEST_URI);
$array = explode("/",$vars);
$num = count($array); // How many items in the array?
for ($i = 1 ; $i < $num ; $i++) {
$page_query[$i] = $array[$i];
}
From here I have a simple configuration array which is used to define what I need to include and I provide definition for the variable passed in my query string.
$page_content[1]['name'] = 'products';
$page_content[1]['source'] = 'products/index.php';
$page_content[1]['group'] = $page_query[1];
$page_content[1]['page_func'] = $page_query[2];
$page_content[1]['item_id'] = $page_query[3];
$page_content[2]['name'] = 'news';
$page_content[2]['source'] = 'news/index.php';
$page_content[2]['group'] = $page_query[1];
$page_content[2]['category'] = $page_query[2];
$page_content[2]['article_id'] = $page_query[3];
ect..
The array method above could be customized to what ever is required and you could pass as number of variables in your query string as you want.
I really like this approach. It's proved very effective. Ultimately I ran into problems caching my templates and providing good group based access to my site, so I came searching and found xoops.
So now I have to try and hack this into the core and see if I can get it working.
If anyone thinks I'm crazy or has suggestions please let me know :)