Index: path_redirect.module
===================================================================
--- path_redirect.module
+++ path_redirect.module
@@ -164,17 +164,20 @@
     $path = drupal_substr($path, drupal_strlen(base_path()));
     // Remove ($language->language .'/') via preg_replace?
     $path = _path_redirect_split_path($path);
-    $where[] = "(path = '%s' OR path = '%s')";
+    $where[] = "(path = '%s' OR path = '%s' OR ((LOWER(path) = '%s' OR LOWER(path) = '%s') AND ignore_case = 1))";
     $args[':path'] = $_GET['q'];
-    $args[':path_query'] = $_GET['q'] .'?'. $path['query'];
+    $args[':path_query'] = $args[':path'].'?'.$path['query'];
+    $args[':path_lower'] = strtolower($args[':path']);
+    $args[':path_query_lower'] = strtolower($args[':path_query']);
     $sort[] = 'path DESC';
     //$where[] = "(path_query = '%s' OR path_query = '')";
     //$args[':path_query'] = $path['query'];
     //$sort[] = 'path_query DESC';
   }
   else {
-    $where[] = "path = '%s'";
+    $where[] = "path = '%s' OR (LOWER(path) = '%s' AND ignore_case = 1)";
     $args[':path'] = $_GET['q'];
+    $args[':path_lower'] = strtolower($args[':path']);
     //$where[] = "path_query = ''";
   }
 
Index: path_redirect.install
===================================================================
--- path_redirect.install
+++ path_redirect.install
@@ -77,6 +77,14 @@
         'not null' => TRUE,
         'description' => 'The HTTP status code to use for the redirect.',
       ),
+      'ignore_case' => array(
+        'type' => 'int',
+        'size' => 'tiny',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+        'default' => 0,
+        'description' => 'Whether the source path is case insensitive.',
+      ),
       'last_used' => array(
         'type' => 'int',
         'unsigned' => TRUE,
@@ -182,3 +190,13 @@
   db_add_unique_key($ret, 'path_redirect', 'path_language', array('path', 'language'));
   return $ret;
 }
+
+/**
+ * Add a case sensitivity field.
+ */
+function path_redirect_update_6102() {
+  $ret = array();
+  db_add_field($ret, 'path_redirect', 'ignore_case', array('type' => 'int', 'size' => 'tiny', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0));
+  return $ret;
+}
+
Index: path_redirect.admin.inc
===================================================================
--- path_redirect.admin.inc
+++ path_redirect.admin.inc
@@ -17,6 +17,7 @@
     array('data' => t('From'), 'field' => 'path', 'sort' => 'asc'),
     array('data' => t('To'), 'field' => 'redirect'),
     array('data' => t('Type'), 'field' => 'type'),
+    array('data' => t('Case Sensitive'), 'field' => 'ignore_case'),
     array('data' => t('Operations'), 'colspan' => '2'),
   );
   if ($multilanguage) {
@@ -25,7 +26,7 @@
   $rows = array();
   $limit = 50;
 
-  $redirects = pager_query('SELECT rid, path, redirect, query, fragment, language, type FROM {path_redirect}'. tablesort_sql($header), $limit);
+  $redirects = pager_query('SELECT rid, path, redirect, query, fragment, language, type, ignore_case FROM {path_redirect}'. tablesort_sql($header), $limit);
   while ($r = db_fetch_object($redirects)) {
     $redirect = url($r->redirect, array('query' => $r->query, 'fragment' => $r->fragment, 'absolute' => TRUE, 'alias' => TRUE));
     $row = array(
@@ -35,6 +36,7 @@
         // @todo: Fix sorting on the redirect field
         l($redirect, $redirect, array('external' => TRUE)),
         $r->type,
+        ($r->ignore_case ? 'No' : 'Yes'),
         l(t('Edit'), 'admin/build/path-redirect/edit/'. $r->rid, array('query' => drupal_get_destination())),
         l(t('Delete'), 'admin/build/path-redirect/delete/'. $r->rid, array('query' => drupal_get_destination())),
       ),
@@ -173,6 +175,13 @@
     '#options' => $status_options,
   );
 
+  $form['advanced']['ignore_case'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Ignore case in the redirected path'),
+    '#description' => t('This makes the source path case insensitive. For example, the path %example1 would match %example2, %example3, and any other case variations.', array('%example1' => 'node/123','%example2' => 'NODE/123','%example3' => 'Node/123')),
+    '#default_value' => $edit['ignore_case'],
+  );
+
   $form['rid'] = array('#type' => 'value', '#value' => $edit['rid']);
   $form['submit'] = array('#type' => 'submit', '#value' => t('Save'));
   $form['cancel'] = array('#value' => l(t('Cancel'), 'admin/build/path-redirect'));
