diff -upr sites/all/modules/boost_orig/boost.module sites/all/modules/boost/boost.module
--- sites/all/modules/boost_orig/boost.module	2008-10-25 21:30:34.000000000 +0400
+++ sites/all/modules/boost/boost.module	2009-01-29 13:29:22.000000000 +0300
@@ -55,6 +55,8 @@ function boost_help($path, $arg) {
  * Implementation of hook_init(). Performs page setup tasks if page not cached.
  */
 function boost_init() {
+//  exit();
+
   // Stop right here unless we're being called for an ordinary page request
   if (strpos($_SERVER['PHP_SELF'], 'index.php') === FALSE || variable_get('site_offline', 0))
     return;
@@ -71,14 +73,20 @@ function boost_init() {
     }
     // We only serve cached pages for GET requests by anonymous visitors:
     else if ($_SERVER['REQUEST_METHOD'] == 'GET') {
+      // We use $_REQUEST['q'] because drupal_init_path() had already changed $_GET['q']
+      $boost_path = $_REQUEST['q'];
+      if (empty($boost_path)) {
+        // special handling for Drupal's front page
+        $boost_path = 'index';
+      }
       // Make sure no query string (in addition to ?q=) was set, and that
-      // the page is cacheable according to our current configuration:
-      if (count($_GET) == 1 && boost_is_cacheable($_GET['q'])) {
+      // the page is cacheable according to our current configuration.
+      if (count($_GET) == 1 && boost_is_cacheable($boost_path)) {
         // In the event of errors such as drupal_not_found(), GET['q'] is
         // changed before _boost_ob_handler() is called. Apache is going to
         // look in the cache for the original path, however, so we need to
         // preserve it.
-        $GLOBALS['_boost_path'] = $_GET['q'];
+        $GLOBALS['_boost_path'] = $boost_path;
         ob_start('_boost_ob_handler');
       }
     }
@@ -273,11 +281,11 @@ function boost_block($op = 'list', $delt
         case 'status':
           // Don't show the block to anonymous users, nor on any pages that
           // aren't even cacheable to begin with (e.g. admin/*).
-          if (!empty($user->uid) && boost_is_cacheable($_GET['q'])) {
+          if (!empty($user->uid) && boost_is_cacheable($_REQUEST['q'])) {
             $output = t('This page is being served <strong>live</strong> to anonymous visitors, as it is not currently in the static page cache.');
 
-            if (boost_is_cached($_GET['q'])) {
-              $ttl = boost_file_get_ttl(boost_file_path($_GET['q']));
+            if (boost_is_cached($_REQUEST['q'])) {
+              $ttl = boost_file_get_ttl(boost_file_path($_REQUEST['q']));
               $output = t('This page is being served to anonymous visitors from the static page cache.') . ' ';
               $output .= t($ttl < 0 ?
                 '<strong>The cached copy expired %interval ago.</strong>' :
@@ -377,21 +385,21 @@ function _boost_get_http_header($regex, 
  * RSS feeds provided by Drupal, since they would require special handling
  * in the mod_rewrite ruleset as they shouldn't be sent out using the
  * text/html content type.
+ * TODO: don't cache pages with unacceptable symbols
  */
 function boost_is_cacheable($path) {
-  $alias = drupal_get_path_alias($path);
-  $path = drupal_get_normal_path($path); // normalize path
+  $normal_path = drupal_get_normal_path($path); // normalize path
 
   // Never cache the basic user login/registration pages or any administration pages
-  if ($path == 'user' || preg_match('!^user/(login|register|password)!', $path) || preg_match('!^admin!', $path))
+  if ($normal_path == 'user' || preg_match('!^user/(login|register|password)!', $normal_path) || preg_match('!^admin!', $normal_path))
     return FALSE;
 
   // At present, RSS feeds are not cacheable due to content type restrictions
-  if ($path == 'rss.xml' || preg_match('!/feed$!', $path))
+  if ($normal_path == 'rss.xml' || preg_match('!/feed$!', $normal_path))
     return FALSE;
 
   // Don't cache comment reply pages
-  if (preg_match('!^comment/reply!', $path))
+  if (preg_match('!^comment/reply!', $normal_path))
     return FALSE;
 
   // Match the user's cacheability settings against the path
@@ -400,18 +408,13 @@ function boost_is_cacheable($path) {
     return !empty($result);
   }
   $regexp = '/^('. preg_replace(array('/(\r\n?|\n)/', '/\\\\\*/', '/(^|\|)\\\\<front\\\\>($|\|)/'), array('|', '.*', '\1'. preg_quote(variable_get('site_frontpage', 'node'), '/') .'\2'), preg_quote(BOOST_CACHEABILITY_PAGES, '/')) .')$/';
-  return !(BOOST_CACHEABILITY_OPTION xor preg_match($regexp, $alias));
+  return !(BOOST_CACHEABILITY_OPTION xor preg_match($regexp, $path));
 }
 
 /**
  * Determines whether a given Drupal page is currently cached or not.
  */
 function boost_is_cached($path) {
-  $path = (empty($path) ? drupal_get_normal_path(variable_get('site_frontpage', 'node')) : $path);
-  $alias = drupal_get_path_alias($path);
-  $path = drupal_get_normal_path($path); // normalize path
-
-  // TODO: also determine if alias/symlink exists?
   return file_exists(boost_file_path($path));
 }
 
@@ -440,17 +443,10 @@ function boost_cache_expire_all($callbac
 function boost_cache_expire($path, $wildcard = FALSE) {
   // TODO: handle wildcard.
 
-  $alias = drupal_get_path_alias($path);
-  $path = drupal_get_normal_path($path); // normalize path
-
   if (($filename = boost_file_path($path)) && file_exists($filename)) {
     @unlink($filename);
   }
 
-  if ($alias != $path && ($symlink = boost_file_path($alias)) && is_link($symlink)) {
-    @unlink($symlink);
-  }
-
   return TRUE;
 }
 
@@ -458,8 +454,6 @@ function boost_cache_expire($path, $wild
  * Returns the cached contents of the specified page, if available.
  */
 function boost_cache_get($path) {
-  $path = drupal_get_normal_path($path); // normalize path
-
   if (($filename = boost_file_path($path))) {
     if (file_exists($filename) && is_readable($filename)) {
       return file_get_contents($filename);
@@ -492,9 +486,6 @@ function boost_cache_set($path, $data = 
     $data = call_user_func(BOOST_PRE_PROCESS_FUNCTION, $data);
   }
 
-  $alias = drupal_get_path_alias($path);
-  $path = drupal_get_normal_path($path); // normalize path
-
   // Create or update the static file as needed
   if (($filename = boost_file_path($path))) {
     _boost_mkdir_p(dirname($filename));
@@ -503,19 +494,6 @@ function boost_cache_set($path, $data = 
         watchdog('boost', 'Unable to write file: %file', array('%file' => $filename), array(), WATCHDOG_WARNING);
       }
     }
-
-    // If a URL alias is defined, create that as a symlink to the actual file
-    if ($alias != $path && ($symlink = boost_file_path($alias))) {
-      _boost_mkdir_p(dirname($symlink));
-      if (!is_link($symlink) || realpath(readlink($symlink)) != realpath($filename)) {
-        if (file_exists($symlink)) {
-          @unlink($symlink);
-        }
-        if (!_boost_symlink($filename, $symlink)) {
-          watchdog('boost', 'Unable to create symlink: %link to %target', array('%link' => $symlink, '%target' => $filename), array(), WATCHDOG_WARNING);
-        }
-      }
-    }
   }
 
   return TRUE;
@@ -537,9 +515,6 @@ function boost_cache_directory($host = N
  * Returns the static file path for a Drupal page.
  */
 function boost_file_path($path) {
-  if (empty($path) || $path == drupal_get_normal_path(variable_get('site_frontpage', 'node'))) {
-    $path = 'index'; // special handling for Drupal's front page
-  }
 
   // Under no circumstances should the incoming path contain '..' or null
   // bytes; we also limit the maximum directory nesting depth of the path
@@ -647,34 +622,6 @@ function _boost_rmdir_rf($dirname, $call
   return ($empty && @rmdir($dirname));
 }
 
-/**
- * Creates a symbolic link using a computed relative path where possible.
- */
-function _boost_symlink($target, $link) {
-  if (!file_exists($target) || !file_exists(dirname($link)))
-    return FALSE;
-
-  $target = explode('/', $target);
-  $link = explode('/', $link);
-
-  // Only bother creating a relative link if the paths are in the same
-  // top-level directory; otherwise just symlink to the absolute path.
-  if ($target[1] == $link[1]) {
-    // Remove the common path prefix
-    $cwd = array();
-    while (count($target) > 0 && count($link) > 0 && reset($target) == reset($link)) {
-      $cwd[] = array_shift($target);
-      array_shift($link);
-    }
-    // Compute the required relative path
-    if (count($link) > 1)
-      $target = array_merge(array_fill(0, count($link) - 1, '..'), $target);
-    $link = array_merge($cwd, $link);
-  }
-
-  return symlink(implode('/', $target), implode('/', $link));
-}
-
 //////////////////////////////////////////////////////////////////////////////
 // PHP 4.x compatibility
 
