mod_rewriteモジュールのディレクティブと正規表現

本記事のポイント

HTTP環境変数とはブラウザがサーバにアクセスする際に、HTTPヘッダに各種の情報を含めて送信するもので、Google Analyticsが参照元を認識できるのは、ブラウザがヘッダー情報としてHTTP_REFERERを送ってくるからです。

正規化と正規表現

今はなき第一種情報処理試験のシステム工学で、データベースの正規化の問題がありましたが、この場合の正規化とはテーブル間の冗長性をキーに基づいて省いていくプロセスのことです。

同じように、正規表現も文字列全体の冗長性を、メタ文字(特殊文字)に基づいて省いていく表現方法です。

Apacheのmod_rewriteモジュールに対してURL表記をリライトしてね、という指令を.htaccessファイルに記述して、httpd.conf設定を上書するために正規表現を使います。

.htaccessファイルに記述するディレクティブと正規表現

ディレクティブ(Directive)とはコマンドと同じ意味ですが、Apacheのmod_rewriteモジュールが実装するコマンドの場合はディレクティブと呼んでいます。

WordPressのプラグインSiteGuardを有効化するたびに自動的に更新される部分です。

  • 3行目:mod_rewriteが利用できるかどうかを確認
  • 4行目:RewriteEngineをオン
  • 5行目:Rewrite処理のベースになるURLを指定。
  • 6行目:「wp-signup.php」という文字列を「404-siteguard」という文字列を置き換え
  • 7行目:「wp-activate.php」という文字列を「404-siteguard」という文字列を置き換え
  • 8行目:「login_12345」とそれに続く任意の文字列を「wp-login.php」という文字列の後ろに任意の文字列をくっつけて置き換え

実際には8行目の正規表現(.*)はブランクなので後方参照である$1もブランクになり、「login_12345という文字列をwp-login.phpという文字列に置き換え」という意味になります。

  • 4行目:HTTPSによるアクセスでない場合
  • 5行目:任意の文字列をHTTPS通信のURLに続く後方参照として置き換え

ちなみに[R=301,L]はRewriteRuleのオプションでリダイレクト(R)の301として指定し、RewriteRuleの条件にマッチした場合にはこれが最後(ラストの[L])で以降は処理しない、という意味です。

これはWordPressをインストールすると自動的に記述するみたいですね。

  • 5行目:HTTP環境変数に入っているモノがファイルでない(ファイルが存在しない)
  • 6行目:HTTP環境変数に入っているモノがディレクトリでない(ディレクトリが存在しない)

HTTP環境変数とはブラウザがサーバにアクセスする際に、HTTPヘッダに各種の情報を含めて送信するもので、Google Analyticsが参照元を認識できるのは、ブラウザがヘッダー情報としてHTTP_REFERERを送ってくるからです。

REQUEST_FILENAMEはリクエストされたファイルの名前、要は入力された文字列であり、これ以外によく登場するHTTP環境変数が以下のようなものです。

  • HTTP_HOST:閲覧しているサイトのドメイン
  • HTTPS:SSL通信の有無
  • HTTP_REFERER:前にいたページのURL