Index: path_redirect.module
===================================================================
--- path_redirect.module
+++ path_redirect.module
@@ -378,8 +378,8 @@
  *   An optional query string to match.
  */
 function path_redirect_load_by_source($source, $language = '', $query = array()) {
-  $where = $query ? "(source = '%s' OR source LIKE '%s')" : "source = '%s'";
-  $args = $query ? array($source, $source . '?%%') : array($source);
+  $where = $query ? "(binary source = '%s' OR binary source LIKE '%s') OR ((ignore_case = 1) AND (source = '%s' OR source LIKE '%s'))" : "(binary source = '%s') OR ((ignore_case = 1) AND (source = '%s'))";
+  $args = $query ? array($source, $source . '?%%',$source, $source . '?%%') : array($source,$source);
   $args[] = $language;
   $rid_query = db_query("SELECT rid FROM {path_redirect} WHERE $where AND language IN ('%s', '') ORDER BY language DESC, source DESC, rid DESC", $args);
   $rids = array();
@@ -390,7 +390,7 @@
   if ($query) {
     $redirects = path_redirect_load_multiple($rids);
     foreach ($redirects as $rid => $redirect) {
-      if (path_redirect_compare_array($redirect['source_query'], $query)) {
+      if (path_redirect_compare_array($redirect['source_query'], $query, $redirect['ignore_case'])) {
         return $redirect;
       }
     }
@@ -564,7 +564,7 @@
  * @param $haystack
  *   The array that will be searched for values.
  */
-function path_redirect_compare_array($match, $haystack) {
+function path_redirect_compare_array($match, $haystack, $ignore_case=1) {
   foreach ($match as $key => $value) {
     if (!array_key_exists($key, $haystack)) {
       return FALSE;
@@ -573,11 +573,14 @@
       if (!is_array($haystack[$key])) {
         return FALSE;
       }
-      elseif (!path_redirect_compare_array($value, $haystack[$key])) {
+      elseif (!path_redirect_compare_array($value, $haystack[$key], $ignore_case)) {
         return FALSE;
       }
     }
-    elseif ($value != $haystack[$key]) {
+    elseif ($ignore_case && (strtolower($value) != strtolower($haystack[$key]))) {
+      return FALSE;
+	}
+    elseif (!$ignore_case && ($value != $haystack[$key])) {
       return FALSE;
     }
   }

Index: path_redirect.install
===================================================================
--- path_redirect.install
+++ path_redirect.install
@@ -55,6 +55,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' => 1,
+        'description' => 'Whether the source path is case insensitive.',
+      ),
       'last_used' => array(
         'type' => 'int',
         'unsigned' => TRUE,
@@ -209,6 +217,15 @@
   db_add_unique_key($ret, 'path_redirect', 'source_language', array('source', 'language'));
   return $ret;
 }
+ 
+/**
+ * Add a case sensitivity field.
+ */
+function path_redirect_update_6104() {
+  $ret = array();
+  db_add_field($ret, 'path_redirect', 'ignore_case', array('type' => 'int', 'size' => 'tiny', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0));
+  return $ret;
+}
 
 /**
  * @} End of "defgroup updates-6.x-extra"

Index: path_redirect.admin.inc
===================================================================
--- path_redirect.admin.inc
+++ path_redirect.admin.inc
@@ -23,6 +23,7 @@
     'redirect' => array('data' => t('To'), 'field' => 'redirect'),
     'type' => array('data' => t('Type'), 'field' => 'type'),
     'language' => array('data' => t('Language'), 'field' => 'language'),
+    'ignore_case' => array('data' => t('Case Sensitive'), 'field' => 'ignore_case'),
     'last_used' => array('data' => t('Last used'), 'field' => 'last_used'),
     'operations' => array('data' => t('Operations')),
   );
@@ -78,6 +79,9 @@
     if (isset($header['language'])) {
       $row['language'] = module_invoke('locale', 'language_name', $redirect['language']);
     }
+    if (isset($header['ignore_case'])) {
+      $row['ignore_case'] = ($redirect['ignore_case'] ? 'No' : 'Yes');
+    }
     if (isset($header['last_used'])) {
       $row['last_used'] = format_date($redirect['last_used'], 'short');
     }
@@ -375,6 +379,12 @@
     '#description' => t('You can find more information about HTTP redirect status codes at <a href="@status-codes">@status-codes</a>.', array('@status-codes' => 'http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#3xx_Redirection')),
     '#default_value' => $redirect['type'],
     '#options' => path_redirect_status_code_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' => $redirect['ignore_case'],
   );
 
   $form['submit'] = array(
