? views/redirect_handler_field_redirect_type.inc
Index: redirect.admin.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/redirect/redirect.admin.inc,v
retrieving revision 1.13
diff -u -p -r1.13 redirect.admin.inc
--- redirect.admin.inc	25 Aug 2010 15:35:10 -0000	1.13
+++ redirect.admin.inc	6 Oct 2010 20:30:53 -0000
@@ -563,6 +563,12 @@ function redirect_settings_form($form, &
     '#title' => t('Redirect from non-canonical URLs to the canonical URLs.'),
     '#default_value' => variable_get('redirect_canonical', 1),
   );
+  $form['globals']['redirect_global_nid'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Redirect from numeric paths to the respective node.'),
+    '#default_value' => variable_get('redirect_global_nid', 0),
+    '#description' => t('For example, redirect from %short to %long.', array('%short' => url('1', array('absolute' => TRUE)), '%long' => url('node/1', array('absolute' => TRUE)))),
+  );
   $form['globals']['redirect_global_admin_paths'] = array(
     '#type' => 'checkbox',
     '#title' => t('Allow redirections on admin paths.'),
Index: redirect.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/redirect/redirect.module,v
retrieving revision 1.26
diff -u -p -r1.26 redirect.module
--- redirect.module	29 Sep 2010 16:04:34 -0000	1.26
+++ redirect.module	6 Oct 2010 20:30:54 -0000
@@ -155,6 +155,10 @@ function redirect_menu() {
  * Implements hook_url_inbound_alter().
  */
 function redirect_url_inbound_alter(&$path, $original_path, $path_language) {
+  if (is_numeric($path) && variable_get('redirect_global_nid', 0) && $node = node_load($path)) {
+    return redirect_redirect(array('redirect' => "node/{$path}", 'type' => 'global'));
+  }
+
   // Redirect to canonical URLs.
   if ($path && variable_get('redirect_canonical', TRUE)) {
     $alias = drupal_get_path_alias($path, $path_language);
@@ -999,6 +1003,7 @@ function redirect_variables() {
     'redirect_global_home' => 1,
     'redirect_global_clean' => 1,
     'redirect_global_canonical' => 1,
+    'redirect_global_nid' => 0,
     'redirect_global_admin_paths' => 0,
   );
 }
Index: redirect.test
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/redirect/redirect.test,v
retrieving revision 1.5
diff -u -p -r1.5 redirect.test
--- redirect.test	21 Aug 2010 04:47:48 -0000	1.5
+++ redirect.test	6 Oct 2010 20:30:54 -0000
@@ -237,4 +237,20 @@ class RedirectFunctionalTest extends Red
     $this->cronRun();
     $this->assertNoRedirect($redirect);
   }
+
+  /**
+   * Test redirecting from a node ID to the actual node path.
+   */
+  function testNodeIDShortlink() {
+    $node = $this->drupalCreateNode();
+    $this->assertNoRedirect(array('source' => '1', 'redirect' => "node/{$node->nid}"));
+
+    $edit = array(
+      'redirect_global_nid' => TRUE,
+    );
+    $this->drupalPost('admin/config/search/redirect/settings', $edit, 'Save configuration');
+    $this->assertText('The configuration options have been saved.');
+
+    $this->assertRedirect(array('source' => '1', 'redirect' => "node/{$node->nid}"));
+  }
 }
