序章
Apacheは、モジュールを有効または無効にすることで機能をカスタマイズできるモジュラーWebサーバーです。 これにより、管理者はWebアプリケーションのニーズに合わせてApacheの機能を調整できます。
このチュートリアルでは、CentOS 7サーバーにApacheをインストールし、mod_rewrite
モジュールが有効になっていることを確認し、いくつかの重要な機能について説明します。
前提条件
このチュートリアルを実行する前に、sudo権限を持つ通常のroot以外のユーザーがいることを確認してください。 これらの権限を持つユーザーを設定する方法の詳細については、ガイドCentOSでSudoユーザーを作成する方法を参照してください。
ステップ1-Apacheをインストールする
CentOSのデフォルトのパッケージ管理ユーティリティであるyum
を使用してApacheをインストールします。
- sudo yum install httpd
Is this ok [y/d/N]:
メッセージが表示されたら、Y
と入力し、ENTER
キーを押してインストールを承認します。
次に、systemctl
ユーティリティを使用して、リクエストを処理するための子プロセスまたはスレッドのプールを作成するスタンドアロンプロセスであるApacheデーモンを起動します。
- sudo systemctl start httpd
Apacheが正常に起動したことを確認するには、status
コマンドでその状態を確認します。
- sudo systemctl status httpd
Output. . .
systemd[1]: Starting The Apache HTTP Server...
systemd[1]: Started The Apache HTTP Server.
Apacheが稼働している状態で、そのモジュールに注目しましょう。
ステップ2–mod_rewriteを確認する
CentOSバージョン7の時点で、mod_rewrite
Apacheモジュールはデフォルトで有効になっています。 これがhttpd
コマンドと-M
フラグの場合であることを確認します。これにより、ロードされたすべてのモジュールのリストが出力されます。
- httpd -M
Output . . .
remoteip_module (shared)
reqtimeout_module (shared)
rewrite_module (shared)
setenvif_module (shared)
slotmem_plain_module (shared)
. . .
rewrite_module
が出力に表示されない場合は、vi
エディターで00-base.conf
ファイルを編集して有効にします。
- sudo vi /etc/httpd/conf.modules.d/00-base.conf
テキストファイルが開いたら、i
と入力して挿入モードに入り、以下の強調表示された行を追加またはコメント解除します。
#
# This file loads most of the modules included with the Apache HTTP
# Server itself.
#
. . .
LoadModule rewrite_module modules/mod_rewrite.so
. . .
次に、ESC
を押して、挿入モードを終了します。 次に、:x
と入力し、ENTER
キーを押して、ファイルを保存して終了します。
次に、Apacheを再起動して構成変更を適用します。
- sudo systemctl restart httpd
Apacheがインストールされ、mod_rewrite
モジュールが有効になっているので、.htaccess
ファイルの使用を構成する準備が整いました。
ステップ3–.htaccessファイルを設定する
.htaccess
ファイルを使用すると、サーバー構成ファイルを変更することなく、ドメインごとにRewriteRule
を含むApacheのディレクティブを定義できます。 Linuxでは、ドット(.
)が前に付いたファイルは非表示として扱われます。
.htaccess
ファイルを使用する前に、AllowOverride
設定を更新して、Apacheディレクティブを上書きできるようにする必要があります。
- sudo vi /etc/httpd/conf/httpd.conf
<Directory /var/www/html>
セクションを見つけて、AllowOverride
ディレクティブをNone
からAll
に変更します。
. . .
<Directory /var/www/html>
. . .
#
# 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
. . .
</Directory>
. . .
ファイルを保存して終了し、Apacheを再起動して変更を適用します。
- sudo systemctl restart httpd
次に、Apacheのデフォルトのドキュメントルート/var/www/html
に.htaccess
ファイルを作成します。
- sudo vi /var/www/html/.htaccess
次の行をファイルの先頭に追加して、RewriteEngine
をアクティブにします。これにより、Apacheに次のルールを処理するように指示されます。
RewriteEngine On
ファイルを保存して終了します。
これで、必要に応じてURLを操作するためのルールを定義できる.htaccess
ファイルができました。 実際のルールを作成する前に、基本的なmod_rewrite
構文を確認してみましょう。
ステップ4–RewriteRule構文の調査
RewriteRule
ディレクティブを使用すると、URLに基づいてリクエストをApacheに再マップできます。 .htaccess
ファイルには複数の書き換えルールを含めることができますが、実行時にApacheは定義された順序でルールを適用します。 書き換えルールは、次の構造で構成されています。
RewriteRule Pattern Substitution [Flags]
- RewriteRule:
RewriteRule
ディレクティブを指定します - Pattern :目的の文字列に一致するPCRE(Perl互換正規表現)。 正規表現の詳細については、こちらをご覧ください。
- 置換:一致するリクエストはどこに送信する必要がありますか
- [ Flags ]:ルールを変更するためのオプションのパラメーター。 使用可能なフラグとその意味の詳細については、 RewriteFlagsに関するApacheのドキュメントを参照してください。
RewriteRule