はじめに
普段サーバーを触ることのない人がApache HTTP Serverの設定をやった備忘録です。
Apache2.4x、AmazonLinux2環境下での内容です。
公式
ディレクティブ一覧
https://httpd.apache.org/docs/2.4/mod/directives.html
前提
rewrite_moduleが読み込まれている必要があります。
httpd -M
等で確認します。
Loaded Modules:
… 略 …
rewrite_module (shared)
もしなければ以下をconfに追記します。
LoadModule rewrite_module modules/mod_rewrite.so
この時、IncludeOptionalディレクティブを追加して別のconfファイルに記述しておくことで管理しやすくなります。
分割した場合は読み込まれているかを確認しておきます。
httpd -t -DDUMP_CONFIG
設定後のテストにはIfModuleディレクティブが便利です。
https://httpd.apache.org/docs/2.4/en/mod/core.html#ifmodule
また、ログ出力はver2.2と違いRewriteLog・RewriteLogLevelは使えません。
私の環境ではデフォルト値はwarnになっていましたので、設定中は最も詳細に出力するよう上げておきます。
LogLevel debug rewrite:trace8
各レベルの詳細や特定のモジュールのレベルを上書きする方法などは以下に書かれています。
https://httpd.apache.org/docs/2.4/en/mod/core.html#loglevel
confの変更を反映する場合は再起動が必要です。
sudo systemctl restart httpd.service
書き方
htaccessファイルに設定することもできますが、理由が無ければconfに直接記述します。
confのDirectoryブロック内に記述することとhtaccessに記述することは同じ効果が得られるようです。
https://httpd.apache.org/docs/2.4/en/howto/htaccess.html
この場合、AllowOverrideを変更する必要はありません。
Directoryのパスを指定する際は、まずDocumentRootディレクティブの指定先を確認しておきます。
もしここが"/var/www/html"のような絶対パスになっていない場合、ServerRootも確認しましょう。
例えば、以下のようにDirectoryディレクティブで括ったブロックはドキュメントルート直下のhogeディレクトリ以下に対するアクセスにマッチします。
<Directory /hoge>
RewriteEngine on
RewriteCond %{REQUEST_URI} ^.*/fuga/index\.html$
RewriteRule .* https://fuga.com
</Directory>
RewriteCondはRewriteRuleを適用する条件を指定します。
パターン部分にコロンなどを記述する場合はエスケープが必要です。
RewriteCondを複数記述した場合はデフォルトでand条件となります。
or条件に変更するには、
RewriteCond %{REQUEST_URI} ^.*/index.html$ [OR]
のように末尾にフラグを追加します。
Locationディレクティブも同様にマッチしますが、Directoryが先に適用されるため注意が必要です。