長生村本郷Engineers'Blog

千葉県長生村本郷育ちのエンジニアが書いているブログ

.htaccessが効かない、動かないときの対処

f:id:kenzo0107:20160408141839j:plain

概要

.htaccess に設定した通りに動作しない、そもそも読み込んでいないように見える場合の対策です。

httpだと mod_rewriteでリダイレクトするけど、 httpsだとしない、とか
ありがちな設定ミスパターンは以下基本的なことを確認して解決できます。

検証環境

そもそも .htaccess を利用するには

/etc/httpd/conf/httpd.conf 等設定ファイル内で以下の記述が必要です。

AllowOverride All

mod_rewrite を利用するには

利用頻度の多い mod_rewrite を利用するには以下が必要です。

1. mod_rewrite.so インストール

2. mod_rewrite.so をApache設定ファイルからロード

まずは上記の確認です。

1. mod_rewrite.so インストール確認

Apacheの場合、大抵modlesディレクトリ以下に格納されてます。

$ ls -al /etc/httpd/modules/mod_rewrite.so
-rwxr-xr-x 1 root root 60464 10月 16 23:49 2014 /etc/httpd/modules/mod_rewrite.so

2. mod_rewrite.so をApache設定ファイルからロードされているか確認

Apache設定ファイル /etc/httpd/conf/httpd.conf や /etc/httpd/conf.d/*.conf で以下を設定している。

※環境によっては /etc/httpd/conf/httpd.conf に設定ファイルを置いてない場合もあるので
 あくまで一般的な例とします。

LoadModule rewrite_module modules/mod_rewrite.so

補足

モジュール読み込み設定は大抵、 以下のように ディレクティブ で AllowOverride All が設定されているかと思います。

以下例では「/var/www/html」ディレクトリ以下では 配置した .htaccess を優先して設定されることになります。

<Directory "/var/www/html">
    AllowOverride All
    Options -Indexes FollowSymLinks Includes ExecCGI
    Order allow,deny
    Allow from all
</Directory>

万が一 mod_rewrite.soモジュールが存在しない場合は Apacheの再コンパイルが必要になります。

Apachemod_rewriteをインストールしリコンパイル

# cd <path to httpd source>
# ./configure –enable-ssl=shared –enable-rewrite –enable-deflate –enable-headers –enable-so
# make & make install
# service httpd restart

以上です。