アイキャッチ画像: デスクの上でパソコンを使用している

こんにちは。 スタジオ・ウミでプログラマーをしている山中です。

今回の記事ではクリーンURLが使えない時の対処法を紹介します。
いくつが原因が考えられますが 大体.htaccess絡みです。

3つのケースとその解決方法についてお話しますね。

1. drupalサイトがサブディレクトリにある場合

たとえばアドレスが http://example.jp/drupal ←こんな感じの時、.htaccess内で以下の記述を探してください。

  # Modify the RewriteBase if you are using Drupal in a subdirectory or in a
  # VirtualDocumentRoot and the rewrite rules are not working properly.
  # For example if your site is at http://example.com/drupal uncomment and
  # modify the following line:
  # RewriteBase /drupal
  #
  # If your site is running in a VirtualDocumentRoot at http://example.com/,
  # uncomment the following line:
  # RewriteBase /

ここの最後の行のRewriteBaseをコメントから外して以下の様に変更します。
例えばhttp://example.jp/drupalなら・・・

  RewriteBase /drupal

RewriteBaseを有効にしたサイトをサブディレクトリがない場所に移転する時は行頭に#を入れてこの記述をコメントアウトしてくださいね!

2. .htaccess内に『RewriteRule』がない場合

サイトのルートフォルダにある.htaccessを見てもらうと下の方に下記のような記述があるかと思います。

  # Various rewrite rules.

  RewriteEngine on

  # If your site can be accessed both with and without the 'www.' prefix, you
〜〜〜〜〜省略〜〜〜〜〜〜
  # Rewrite URLs of the form 'x' to the form 'index.php?q=x'.
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} !=/favicon.ico
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

最後から2行目の部分が一番怪しい感じがしますね!
RewriteEngineをonにしてRewriteRuleで指定してあげないといけないようです。

3. サイトのルートフォルダ内に.htaccessファイルが無い場合

.htaccessファイルがサイトのルートフォルダ上になければdrupalのコアをダウンロードしてきて展開してでてきたフォルダの中にある.htaccessファイルをコピペしてください。

ここからは経験談ですが、とあるDrupalサイトの改修を行った時のことです。
そのサイト用に.htaccessが変更されていたようで、サイトのデータやファイル群を開発環境に移して開発環境においたサイトを見てみたところブラウザに閲覧権限がねーよ!(permission dinied)と怒られてしまいました。
でも.htaccess内を見て何がだめなのか判断するのが非常に面倒になってしまったので.htaccessを削除!
.htaccessファイルを削除した後、再度見てみたところトップページが表示されました。

でもサブページにアクセスできません。
/userページにアクセスもできなかったらログインすらできないじゃない!

そこでURLパラメータ形式で送ってみたところアクセスできました。
(例えば http://studio-umi.jp/services/website なら http://studio-umi.jp/?q=services/website に)

もしかして、と思い手元にダウンロードしてあるdrupal最新版のファイルからコピーした.htaccessを試しに入れてみたところ問題なくサイトを見ることができました!

大体は上記の解決策で解決するはず! その他の要因としてはサーバでmod_rewriteが入っていない・あるいは許可されていないというのが考えられます。 自分でサーバの設定を変えたりできない場合はあきらめて他のサーバを使った方が良いと思います。