How can I make special non-Drupal URLs without file extensions? As I understand it, Drupal is supposed to check the web root for any URLs it doesn't recognize, to see if it's a non-Drupal file on disk.  Also, Apache is supposed to assume that anything without a file extension is a request for whatever.html, correct?  

Here's what I'm trying to achieve: a user requests mysite.com/FOO, Drupal doesn't find any path/alias for FOO, and thus turns it over to Apache.  Apache doesn't see a file extension, and thus looks for a file called FOO.html (which exists) and serves up that file.

If I request mysite.com/FOO.html, the file is returned just fine.  I'm just trying to make it so that people can access FOO.html by simply requesting /FOO, since you can't trust the user to type in the full URL.  (And because it looks nicer in a print ad.)

I'm guessing that there's some .htaccess magic that needs to happen, but I haven't been able to come up with the right trick. I think that Drupal passes to Apache, which doesn't find /FOO, then the .htaccess file punts the request to Drupal's index.php, which returns the Drupal 404 page.
If the file exists serve it. 

  RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}\.html -s
  RewriteRule .* %{REQUEST_URI}\.html [L,T=text/html]


You'll need to put it above this inside your .htaccess file.

  # Pass all requests not referring directly to files in the filesystem to
  # index.php. Clean URLs are handled in drupal_environment_initialize().
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} !=/favicon.ico
  RewriteRule ^ index.php [L]


You can't pass the request back to apache once you've passed it to Drupal. The code above will hit the .html file first if it exists.

To do exactly what you want, you can set the 404 handler inside of drupal to a custom page; that page could then check to see if the file exists and use that. Config page for 404: admin/config/system/site-information. The handler would use something like this 

&lt;?php
$path = substr(request_uri(), strlen($GLOBALS['base_path'])) . '.html';
if (file_exists($path)) {
  echo file_get_contents($path);
  exit;
}
return MENU_NOT_FOUND;
// OR this, not sure.
return drupal_not_found();
?&gt;