--- path_redirect.module 2007-10-06 20:12:11.539744250 -0500 +++ path_redirect.module.new 2007-10-06 20:12:38.053401250 -0500 @@ -25,8 +25,24 @@ function path_redirect_help($section) { function path_redirect_init() { // check through the redirects // see if this page is one of those - $path = db_escape_string($_GET['q']); - $r = db_fetch_object(db_query("SELECT redirect, query, fragment, type FROM {path_redirect} WHERE path = '%s'", $path)); + + // Assumption: + // The order of the variables matches that given + + // OK, clean up the request so that it's consistent - there might be a cleaner way of doing this using regular expressions + $presentedPath = urldecode(trim($_SERVER['REQUEST_URI'], '/')); + if (substr($presentedPath, 0, 3) == "?q=") { + $presentedPath = substr($presentedPath, 3); + $ampPos = strpos($presentedPath, "&"); + if ($ampPos !== FALSE) { + $presentedPath = substr($presentedPath, 0, $ampPos) . "?" . substr($presentedPath, $ampPos + 1); + } + } + $testURL = drupal_get_normal_path($presentedPath); + + // Use the base case + $r = db_fetch_object(db_query('SELECT redirect, query, fragment, type FROM {path_redirect} WHERE path = "%s"', $testURL)); + if ($r) { drupal_goto($r->redirect, ($r->query ? $r->query: NULL), ($r->fragment ? $r->fragment : NULL), $r->type); } @@ -248,9 +264,6 @@ function path_redirect_edit_validate($fo elseif (strstr($form_values['path'], '#')) { form_set_error('path', t('You cannot redirect from a fragment anchor.')); } - elseif (strstr($form_values['path'], '?')) { - form_set_error('path', t('You cannot currently include a query in your redirect from path.')); - } elseif (!valid_url($form_values['path'])) { form_set_error('path', t('The redirect from path does not appear valid. This must be a local Drupal path.')); }