Poor man's Global Redirect for Drupal 6.x
I was moving a customer's site from an old HTML and individual PHP page site to a friendly URL site managed by Drupal, and I only cared about intercepting URLs with those file extensions. I installed Global Redirect on a Drupal 6.x site, and the entire site started going into an infinite redirect, before I even had time to configure it. I had to use Drush to disable the module, and immediately uninstalled Global Redirect since I didn't have time to debug what was going on, and hacked this up.
I didn't really need this to do much. The code is simple and there is no UI to manage it, but it works, and even gives you cute little X-Redirect headers to let you know if it was executed and if it found a match. It would be easy enough to take that if() out and have it check any URL (just be sure to remove the fallback
)
function foo_init() {
if(stristr($_SERVER['REQUEST_URI'], '.php') || stristr($_SERVER['REQUEST_URI'], '.htm')) {
$old = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$new = db_result(db_query("SELECT new_url FROM custom_redirect WHERE old_url = '%s'", $old));
if($new) {
watchdog('foo', $old.' found in the custom_redirect table', NULL, WATCHDOG_INFO);
header('X-Redirect: Found');
drupal_goto('http://'.$_SERVER['HTTP_HOST'].$new, '', '', 301);
} else {
watchdog('foo', $old.' NOT found in the custom_redirect table', NULL, WATCHDOG_ERROR);
header('X-Redirect: Not Found');
drupal_goto('http://'.$_SERVER['HTTP_HOST'].'/', '', '', 302);
}
}
}
The table?
CREATE TABLE custom_redirect ( old_url varchar(150) NOT NULL, new_url varchar(150) NOT NULL, PRIMARY KEY (old_url) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Enjoy. Totally could have Drupal'ed that up and made a hook_install() for the schema too, right? :p