本記事の概要
HTTP環境変数とはブラウザがサーバにアクセスする際に、HTTPヘッダに各種の情報を含めて送信するもので、Google Analyticsが参照元を認識できるのは、ブラウザがヘッダー情報としてHTTP_REFERERを送ってくるからです。
正規化と正規表現
今はなき第一種情報処理試験のシステム工学で、データベースの正規化の問題がありましたが、この場合の正規化とはテーブル間の冗長性をキーに基づいて省いていくプロセスのことです。
同じように、正規表現も文字列全体の冗長性を、メタ文字(特殊文字)に基づいて省いていく表現方法です。
Apacheのmod_rewriteモジュールに対してURL表記をリライトしてね、という指令を.htaccessファイルに記述して、httpd.conf設定を上書するために正規表現を使います。
.htaccessファイルに記述するディレクティブと正規表現
ディレクティブ(Directive)とはコマンドと同じ意味ですが、Apacheのmod_rewriteモジュールが実装するコマンドの場合はディレクティブと呼んでいます。
1 2 3 4 5 6 7 8 9 10 11 |
#SITEGUARD_PLUGIN_SETTINGS_START #==== SITEGUARD_RENAME_LOGIN_SETTINGS_START <IfModule mod_rewrite.c> RewriteEngine on RewriteBase / RewriteRule ^wp-signup\.php 404-siteguard [L] RewriteRule ^wp-activate\.php 404-siteguard [L] RewriteRule ^login_12345(.*)$ wp-login.php$1 [L] </IfModule> #==== SITEGUARD_RENAME_LOGIN_SETTINGS_END #SITEGUARD_PLUGIN_SETTINGS_END |
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という文字列に置き換え」という意味になります。
1 2 3 4 5 6 |
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://bahtera.jp/$1 [R=301,L] </IfModule> |
- 4行目:HTTPSによるアクセスでない場合
- 5行目:任意の文字列をHTTPS通信のURLに続く後方参照として置き換え
ちなみに[R=301,L]はRewriteRuleのオプションでリダイレクト(R)の301として指定し、RewriteRuleの条件にマッチした場合にはこれが最後(ラストの[L])で以降は処理しない、という意味です。
1 2 3 4 5 6 7 8 9 |
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress |
これはWordPressをインストールすると自動的に記述するみたいですね。
- 5行目:HTTP環境変数に入っているモノがファイルでない(ファイルが存在しない)
- 6行目:HTTP環境変数に入っているモノがディレクトリでない(ディレクトリが存在しない)
HTTP環境変数とはブラウザがサーバにアクセスする際に、HTTPヘッダに各種の情報を含めて送信するもので、Google Analyticsが参照元を認識できるのは、ブラウザがヘッダー情報としてHTTP_REFERERを送ってくるからです。
REQUEST_FILENAMEはリクエストされたファイルの名前、要は入力された文字列であり、これ以外によく登場するHTTP環境変数が以下のようなものです。
- HTTP_HOST:閲覧しているサイトのドメイン
- HTTPS:SSL通信の有無
- HTTP_REFERER:前にいたページのURL