3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

mod_rewriteについて

Posted at

はじめに

普段サーバーを触ることのない人が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が先に適用されるため注意が必要です。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?