Drupal7をサブディレクトリで動作させる方法


概要

Drupal7をドキュメントルートではなくサブディレクトリで動作させる方法です。
Apacheなどのサーバー設定の詳細は記載しません。ご了承ください。

出来ること 例
/var/www/project をドキュメントルートとし、http://example.com/ でアクセス可能になっている場合、
/var/www/project/drupal にdrupal一式を配置して、以下のようなURLでアクセス可能とする。

http://example.com/drupal
http://example.com/drupal/node/100
http://example.com/drupal/admin/config

修正箇所

drupalのルートディレクトリの.htaccessに追記

/var/www/project/drupal/.htaccess
RewriteBase /drupal

ドキュメントルートに.htaccessを配置(もしくは追記)

/var/www/project/.htaccess
  # ルートのアクセスをサブディレクトリdrupalへ
  RewriteCond %{REQUEST_FILENAME} -f [OR]
  RewriteRule ^$ /drupal/index.php [L]

  # ルートファイルへのアクセスは、そのまま有効とする
  RewriteCond %{REQUEST_FILENAME} -f [OR]
  RewriteCond %{REQUEST_FILENAME} -d
  RewriteRule ^ - [L]

  # サブディレクトリdrupalへファイルアクセスを流す
  RewriteCond %{DOCUMENT_ROOT}/drupal/%{REQUEST_URI} -f [OR]
  RewriteCond %{DOCUMENT_ROOT}/drupal/%{REQUEST_URI} -d
  RewriteRule ^(.*)$ /drupal/$1 [L]

  # その他アクセスはサブディレクトリdrupalへ流す
  RewriteRule ^(.*)$ /drupal/index.php?q=$1&%{QUERY_STRING} [L]

ポイント

ドキュメントルートの.htaccessは記述すると安心ですが、必須ではないです。
その運用に合わせて記述を変えてください。

サブディレクトリで動作させる場合、
カスタムテーマで画像のパスを「/sites/all/〜」など独自に指定してるとパスがずれるので対応が大変になるかも。
リンクの生成はDrupalにお任せするのがベスト。

どうしても、自分でパスを生成する必要があるときは、

ex.php
$base_url  ・・・  : http://example.com 
base_path() ・・・  : /drupal/

などで取得すると楽です。以上です。