diff -r e3d7322305bf -r 5e1f1e916419 punbb/rewrite.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/punbb/rewrite.php Sat Apr 05 23:56:45 2008 -0400 @@ -0,0 +1,103 @@ + $_ ) +{ + $$key =& $GLOBALS[$key]; +} + +// Allow extensions to create their own rewrite rules/modify existing rules +($hook = get_hook('re_rewrite_rules')) ? eval($hook) : null; + +// We determine the path to the script, since we need to separate the path from the data to be rewritten +$path_to_script = contentPath . $paths->nslist['Special'] . 'Forum'; +if (substr($path_to_script, -1) != '/') + $path_to_script = $path_to_script.'/'; + +// We create our own request URI with the path removed and only the parts to rewrite included +// $request_uri = substr($_SERVER['REQUEST_URI'], strlen($path_to_script)); +// if (strpos($request_uri, '?') !== false) +// $request_uri = substr($request_uri, 0, strpos($request_uri, '?')); +$request_uri = $paths->getAllParams(); + +$rewritten_url = ''; +$url_parts = array(); + +$pun_rewrite_rules['/^$/'] = 'index.php'; + +// die('
' . htmlspecialchars(print_r($pun_rewrite_rules, true)) . '
'); + +// We go through every rewrite rule +foreach ($pun_rewrite_rules as $rule => $rewrite_to) +{ + // We have a match! + if (preg_match($rule, $request_uri)) + { + $rewritten_url = preg_replace($rule, $rewrite_to, $request_uri); + $url_parts = explode('?', $rewritten_url); + + // If there is a query string + if (isset($url_parts[1])) + { + $query_string = explode('&', $url_parts[1]); + + // Set $_GET properly for all of the variables + // We also set $_REQUEST if it's not already set + foreach ($query_string as $cur_param) + { + $param_data = explode('=', $cur_param); + + if (!isset($_REQUEST[$param_data[0]])) + $_REQUEST[$param_data[0]] = urldecode($param_data[1]); + + $_GET[$param_data[0]] = urldecode($param_data[1]); + } + } + break; + } +} + +// If we don't know what to rewrite to, we show a bad request messsage +if (empty($rewritten_url)) +{ + header('HTTP/1.x 404 Not Found'); + + // Allow an extension to override the "Bad request" message with a custom 404 page + ($hook = get_hook('re_page_not_found')) ? eval($hook) : null; + + exit('Bad request'); +} + +// We change $_SERVER['PHP_SELF'] so that it reflects the file we're actually loading +$_SERVER['PHP_SELF'] = str_replace('rewrite.php', $url_parts[0], $_SERVER['PHP_SELF']); + +require PUN_ROOT.$url_parts[0];