現在AWSでとあるサービスを作ってます。
※ AWS = Amazon Web Service
そこで次の事件がありました。
- EC2にインスタンスを作る
- そこにApacheをインストール
- 普通に.htaccessを設置する
- アレ?なんで効かないの?
こういう感じですね。
そこで自分自身の記憶の整理も兼ね、
Apacheでhtaccessが効かない時の対処法 を紹介
対処法というか有効化手順の方が正しいかも
もちろんAWS以外でも有効なやり方です。
このページの目次
0.htaccessが効かない経緯について
Apacheのインストールは上手くいきました。
実際にテストページの表示も成功します。
そしてhtaccessもアップロードできたんです。
▼ 中身はこういう内容だった
1 2 3 4 5 6 7 8 |
# リライトとリダイレクト <IfModule mod_rewrite.c> RewriteEngine On # URLを www なしに統一 RewriteCond %{HTTP_HOST} ^www\.(.*)$ RewriteRule ^(.*)$ https://%1/$1 [R=301,L] </IfModule> |
単にwwwなしに統一するだけのディレクティブです。
ところが.htaccesが全く機能していません。
普通にwwwありなし両方でアクセスできてしまう・・
原因はApache側で有効化してなかったからです。
1.httpd.confにて.htaccessを許可する
まずhttpd.confを開きます。
▼ ターミナルからvimで開く
1 |
sudo vim /etc/httpd/conf/httpd.conf |
そしたらこういう記述を見つけてください。
▼ /var/www/html領域の設定
1 2 3 4 5 |
<Directory "/var/www/html"> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> |
※ 環境によって少し違うので注意
この AllowOverride None が問題なんです。
これを次のように書き変えしてみてください。
▼ このように記述を変えてみた
1 2 3 4 5 |
<Directory "/var/www/html"> Options Indexes FollowSymLinks AllowOverride ALL Require all granted </Directory> |
単に AllowOverride ALL とするだけ
ちなみに AllowOverride ですが・・・
▼ このディレクティブの公式解説
このディレクティブを None に設定すると、.htaccess ファイルは完全に 無視されます。 この場合、サーバはファイルシステムの .htaccess ファイルを読むことを 試みさえしません。このディレクティブが All に設定されている時には、 .htaccess という コンテキスト を持つ 全てのディレクティブが利用できます。
引用元 : https://httpd.apache.org/docs/2.2/ja/mod/core.html#AllowOverride
ココに書かれているように None になっていると.htaccess自体が全く効かないようです。だから AllowOverride ALL とする必要があったわけですね。(納得)
2.Apacheサーバーを再起動させる
最後の仕上げとして再起動
▼ このようなコマンドを実行
1 |
$ sudo systemctl restart httpd |
これで無事.htaccessが効くようになりました!
Apacheを手動インストールするなら要注意です。
まとめ - htaccess有効化は少し面倒かも
まあレンタルサーバーなら遭遇しない問題です。
ただ自分で自宅サーバーを立てたり、あるいはAWSでサイト・サービスを作るなら、「あれ?なんで.htaccessが効いてくれないの?」と困ってしまうかもしれません。
その時はここまでの手順を試してみてください。
以上、htaccessが効かない時の対処法でした。(^^)/~~~