序章

Apacheは、モジュールを有効または無効にすることで機能をカスタマイズできるモジュラーWebサーバーです。 これにより、管理者はWebアプリケーションのニーズに合わせてApacheの機能を調整できます。

このチュートリアルでは、CentOS 7サーバーにApacheをインストールし、mod_rewriteモジュールが有効になっていることを確認し、いくつかの重要な機能について説明します。

前提条件

このチュートリアルを実行する前に、sudo権限を持つ通常のroot以外のユーザーがいることを確認してください。 これらの権限を持つユーザーを設定する方法の詳細については、ガイドCentOSでSudoユーザーを作成する方法を参照してください。

ステップ1-Apacheをインストールする

CentOSのデフォルトのパッケージ管理ユーティリティであるyumを使用してApacheをインストールします。

  1. sudo yum install httpd

Is this ok [y/d/N]:メッセージが表示されたら、Yと入力し、ENTERキーを押してインストールを承認します。

次に、systemctlユーティリティを使用して、リクエストを処理するための子プロセスまたはスレッドのプールを作成するスタンドアロンプロセスであるApacheデーモンを起動します。

  1. sudo systemctl start httpd

Apacheが正常に起動したことを確認するには、statusコマンドでその状態を確認します。

  1. 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_rewriteApacheモジュールはデフォルトで有効になっています。 これがhttpdコマンドと-Mフラグの場合であることを確認します。これにより、ロードされたすべてのモジュールのリストが出力されます。

  1. 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ファイルを編集して有効にします。

  1. sudo vi /etc/httpd/conf.modules.d/00-base.conf

テキストファイルが開いたら、iと入力して挿入モードに入り、以下の強調表示された行を追加またはコメント解除します。

/etc/httpd/conf.modules.d/00-base.conf
#
# 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を再起動して構成変更を適用します。

  1. sudo systemctl restart httpd

Apacheがインストールされ、mod_rewriteモジュールが有効になっているので、.htaccessファイルの使用を構成する準備が整いました。

ステップ3–.htaccessファイルを設定する

.htaccessファイルを使用すると、サーバー構成ファイルを変更することなく、ドメインごとにRewriteRuleを含むApacheのディレクティブを定義できます。 Linuxでは、ドット(.)が前に付いたファイルは非表示として扱われます。

.htaccessファイルを使用する前に、AllowOverride設定を更新して、Apacheディレクティブを上書きできるようにする必要があります。

  1. sudo vi /etc/httpd/conf/httpd.conf

<Directory /var/www/html>セクションを見つけて、AllowOverrideディレクティブをNoneからAllに変更します。

/etc/httpd/conf/httpd.conf
. . .
<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を再起動して変更を適用します。

  1. sudo systemctl restart httpd

次に、Apacheのデフォルトのドキュメントルート/var/www/html.htaccessファイルを作成します。

  1. sudo vi /var/www/html/.htaccess

次の行をファイルの先頭に追加して、RewriteEngineをアクティブにします。これにより、Apacheに次のルールを処理するように指示されます。

/var/www/html/.htaccess
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