The usual way for Drupal is to have it live in the root of your web site. It’s all nice if the only thing on your site is Drupal, but it gets very cluttered when you have other top-level directories.

One customer had his corporate site at, say, “www.example.com“, and his customer support pages at “www.example.com/support“.  We wanted to keep the application in the “support” directory, move all the drupal directories under “corporate“. And keep the old links working.

First we had to let Drupal know that, even if it’s been relocated to “corporate”, the URL still remains the same. Do it in “corporate/sites/default/settings.php“:

$base_url = 'http://www.example.com';

Then tell Apache that Drupal has moved. Put these rewrite rules in .htaccess in the root of your web site.

  RewriteEngine on
 
  # Rewrite www.example.com to the Drupal home page: www.example.com/corporate/index.php
  RewriteRule ^$ corporate/index.php [L]
  # Let Drupal process paths like www.example.com/corporate/about
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^corporate/(.*)$ corporate/index.php?q=$1 [L,QSA]
 
  # Search for real Drupal files that moved, 
  #  (e.g. www.example.com/flash/intro.swf to www.example.com/corporate/flash/intro.swf)
  RewriteCond %{DOCUMENT_ROOT}/corporate/$1 -f
  RewriteRule ^(.*)$ corporate/$1 [L]
 
  # Let Drupal process all paths that are not real files and directories, like www.example.com/about
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} !=/favicon.ico
  RewriteRule ^(.*)$ corporate/index.php?q=$1 [L,QSA]
 
  # What's left are real non-Drupal pages and directories, like www.example.com/support

Leave a Comment:

Your email address will not be published. Required fields are marked *