.htaccess はディレクトリ単位でWEBサーバの設定を制御することができるファイルです。
.htaccess は Apache web サーバでのみ使用可能で、nginx のようなApache以外のwebサーバでは使用できません。
.htaccess はそのままでは使えない可能性があるので、使えるように設定する必要があります。
今回は .htaccess を有効にする方法について記載します。
なお、今回の環境は以下になります。 Amazon Linux2 docker コンテナにて Apache2.4 を使用します。
目次
.htaccess を使用可能にするモジュールの確認
Apacheは必要な機能をモジュールという単位で読み込んでいます。
mod_rewrite.so は .htaccess を有効にする為のモジュールです。
Apacheのモジュールについては以下を参考にして下さい。
mod_rewrite.so の確認方法
以下のコマンドでmod_rewrite.soモジュールを検索します。
・コマンド
find / -name 'mod_rewrite.so'
・結果
/usr/lib64/httpd/modules/mod_rewrite.so
なお、Apacheが読み込むモジュールの場所については、以下でも確認できます。
mod_rewriteが有効になっている事の確認
モジュールの読み込みはApacheの設定ファイルに記載があります。
Amazon Linux2 のApacheでは設定ファイルは分割されていて、モジュール読み込み用に設定ファイルがありました。
自分の環境では 00-base.conf に mod_rewrite.so の読み込みの記載がありました。
・コマンド
cat /etc/httpd/conf.modules.d/00-base.conf
・記載内容抜粋
LoadModule rewrite_module modules/mod_rewrite.so
コメントアウトされていなければmod_rewriteが有効になっているということになります。
Apacheのモジュール読み込みについては以下を参考にして下さい。
設定の上書きの許可
設定の変更
今回はドキュメントルートへApacheの設定変更を許可する設定を行います。なお、自分の環境では “/var/www/html” がドキュメントルートになっています。
Apacheの設定変更を許可する設定は AllowOverride ディレクティブを使用します。AllowOverride が “None” の場合、”All” へ変更します。
これは、ディレクトリ “/var/www/html” に対してApacheの設定を上書き可能とする事を許可するということです。
こうすることにより、.htaccess の設定内容によってApacheの設定を上書きするということになります。
以下は、Apacheの設定ファイルのドキュメントルートの設定内容を抜粋したものになります。
# Further relax access to the default document root:
<Directory "/var/www/html">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs/2.4/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks
#
# 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 All
#
# Controls who can get stuff from this server.
#
Require all granted
</Directory>
Apacheの設定読み込み
設定ファイルを変更しただけではApacheは設定を読み込んでくれません。Apacheを再起動すると変更した設定を読み込んでくれます。
ゆえに、Apacheを再起動します。
systemctl restart httpd
動作確認
.htaccessの作成
試しにドキュメントルート(“/var/www/html”)へ .htaccess ファイルを配置し動作を確認してみましょう。
・コマンド
vi /var/www/html/.htaccess
・内容
RewriteEngine On
RewriteRule ^test.html$ /test/index.html [R,L]
http://localhost/test.htmlへアクセスすると、http://localhost/test/index.htmlへリダイレクトされるという設定になります。
動作確認用ファイルの作成
以下のコマンドを実行し、確認の為にブラウザに表示させるファイルを作成します。
内容は “test” と言う文字としますが内容はなんでも良いです。
mkdir /var/www/html/test
vi /var/www/html/test/index.html
確認
ブラウザへ http://localhost/test.html を入力して下さい。 “test” と表示されれば成功です。
ちなみに今回はリダイレクトされているのでブラウザのアドレスバーは http://localhost/test/test.html となります。
最後に
簡単なようでそう簡単にはうまくいきませんね。色々調べて意味を理解してやっと出来たという感じです。