treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

.htaccessファイルに記述したのに動作が変わらない

初心者丸出しで少々恥ずかしいのですが、本日は.htaccessファイルを配置したのに有効にならない場合の確認箇所をご報告します。

ちょっと前の話です。

きっかけは~(一部フィクション)

「httpで今アクセスしているページ、あるじゃない?」
「ああ、ありますね。どうしたんですか?」
「あれ、httpsにリダイレクトしたいんだよね。」
「じゃあ、httpsでアクセスするように設定書き換えればいいじゃないですか。」
「いや、httpでブックマークしているユーザもいるから、httpでアクセスしてきたらhttpsになるようにリダイレクトしたい。」
「じゃあディレクトリとファイルを指定してもらえれば.conf書き換えますよ。」
「でもapacheリスタートはしないでね。」
「じゃあ、.htaccessファイル作成しておきますよ。」

apacheリスタートはせずに、httpをhttpsにリダイレクトする、となると、.htaccessファイルでリダイレクト設定を記述する、という手になりますね。
このときは、ファイル一つ生成するだけの簡単な話だと思っていました。

しかしうまくいかない

.htaccessを生成してリダイレクト設定を記述し、ファイルをリダイレクトしたい指定のディレクトリに配置、いざ動作確認を…

まったく動作してない。ヨソウガイデス。

そ、そんな…。.htaccessに記述したリダイレクト設定は全く動作せず動作が変わることがありません。なんじゃこれは。

別の詳しい人に相談します。指摘されて確認した順番に記載していきますね。

1).htaccessが動作しないときの確認その1

ファイルのパーミッションを確認します。.htaccessパーミッションによっては動作しないことがあるのです。
幸い別のディレクトリに構築担当者が配置したと思われる.htaccessがありました。
-rw-r--r-- 1 User User  185 Nov 30  2012 .htaccess
-rw-r--r-- 1 User User  285 Feb 23 11:02 .htaccess
同じに見えるなぁ…。
第一の確認項目は問題なし、と言えます。

2).htaccessが動作しないときの確認その2

文字コードや改行コードの確認も重要な確認事項です。
とはいえ、今回の.htaccessファイルはLinux上のviエディタで生成したので、ここは問題なしと言えます。

3)構文の記述や正規表現の記述方法に問題ないか

大前提の話に思えますが、ここにも間違いはありません。

ここまで確認していて、なんだろうなぁ…。
なんか.htaccessが無視されているように思えるんだよなぁ…、と発言したのがきっかけでした。

「既定で拒否られているんじゃない?apacheの.confで無効になってないかみてみたら?」
「えぇ?.htaccessでどこでも使えるんじゃないんですか?」
「いや一部VPSサービスだと、.htaccessが有効じゃないから、わざわざ手作業で有効化しないと使えない。」
「えーあー、そうですかー。ちょっと見てみますー。」

解決)httpd.conf(apache.conf)で有効化されているか

httpd.conf(apache.conf)でAllowOverrideをgrepしてみると、ありました。

----------------------------------------------
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   Options FileInfo AuthConfig Limit
#
    AllowOverride None
----------------------------------------------
None…。
このAllowOverrideディレクティブは、.htaccessファイルの配置を制御します。
この記述「AllowOverride None」だと.htaccessファイルは無視されてしまいます。
「AllowOverride All」に記述変更が必要です。
いままで.htaccessは配置されていたけどどれも有効じゃなかった、ってことですかそうですか。
ちなみに、バーチャルホストなどで(DocumentRoot外の)違うディレクトリに配置している場合には、バーチャルホスト指定の付近にでも以下の記述をしておくといいです。
----------------------------------------------
<Directory "/var/www/dummy-host.example.com">
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>
----------------------------------------------


原理は分かりましたが、これ、

結局apacheリスタートしなきゃ有効になりませんよ。アタフタ


アタフタしながら再度相談しました。
これ急ぎますか?
「来月やる更新作業でhttps化できていればいいから、リスタートして問題ないタイミングで確認して更新しておいてちょうだいな。」

あ、時間に余裕あったのね…。

この文書をお読みの方も、.htaccessファイルを利用するための「AllowOverride」設定にはご注意ください。いざ使いたいときに「AllowOverride None」で結局apacheリスタートかよ…と、ならないように、時間に余裕のあるうちに設定を変更しておいたほうがいいと思いますよ。
アタフタしないで済むかもしれません。