Apache RewriteCond の基礎知識

投稿者 : OSCA

ここでは Apache の mod_rewrite の機能である RewriteCond について説明します。

RewriteCond とは?

ディレクティブ「RewriteCond」は、RewriteRule を実行するための条件を定義するための記述です。 RewriteCond に記述した条件が満たされた時のみ RewriteRule に書いたURLの書き換えと転送が実行されるようにできます。

RewriteCond は、RewriteRule の記述部の前に複数個記述することができます。 RewriteCond を複数記述した場合には、複数の条件が全て一致した場合に RewriteRule を実行するのか(AND)、複数の条件のいずれかが一致した場合に実行するのか(OR) も指定することができます。

RewriteCond の書式

RewriteCond の書式は次の通りです。

RewriteCond %変数名(テスト文字列) 条件パターン(正規表現) [フラグ]
RewriteRule ここにRewriteRuleのURL書換&転送設定を記述

フラグ

フラグの役割は2つあります。

  1. RewriteCond の適用条件 AND/OR を切替える
  2. 条件判定に大文字/小文字の区別をするか否かを切替える

1つ目の役割は、RewriteCond を複数指定した場合に AND/OR を切替えます。 フラグを記述せずに RewriteCond を複数行記述した場合は AND になります。 フラグに [OR] と記述した場合は OR になります。

2つ目の役割は、その行の RewriteCond の条件比較を大文字と小文字を区別するか否かを切替えます。 [NC] と記述することで大文字と小文字を区別しなくなります。 (=NCを指定しないと区別します)

OR と NC をどちらも指定したい場合には [OR,NC] とカンマで区切って指定します。

例 : 条件を一つ指定する場合

RewriteCond %変数名 条件
RewriteRule URL書換&転送の記述
RewriteCond %変数名 条件 [NC]
RewriteRule URL書換&転送の記述

例 : 条件を複数指定する場合 (AND条件の例)

RewriteCond %変数名 条件
RewriteCond %変数名 条件
RewriteRule URL書換&転送の記述

例 : 条件を複数指定する場合 (OR条件で、1つ目の条件は大文字/小文字を区別しない場合の例)

RewriteCond %変数名 条件 [OR,NC]
RewriteCond %変数名 条件
RewriteRule URL書換&転送の記述

変数名

変数名には Apache が用意した以下の変数が利用できます。 何を条件にしたいのかを考えて利用する変数を選定してください。

グループ変数名値・意味
HTTP ヘッダHTTP_USER_AGENTユーザーエージェント
HTTP_REFERER参照元URL
HTTP_COOKIEクッキー情報
HTTP_FORWARDEDプロキシ情報
HTTP_HOSTサーバーのホスト名
HTTP_PROXY_CONNECTIONプロキシを経由しているか否か
HTTP_ACCEPTブラウザの言語タイプ
コネクション & リクエストREMOTE_ADDRリモートアドレス
REMOTE_HOSTリモートホスト名
REMOTE_USERリモートユーザー名 (基本認証利用時)
REMOTE_IDENTリモートユーザーのID
REQUEST_METHODリクエストメソッド
SCRIPT_FILENAMEスクリプトファイル名
PATH_INFOパス情報
QUERY_STRINGクエリ文字列
AUTH_TYPE認証タイプ
サーバ内部変数DOCUMENT_ROOTドキュメントルートのパス
SERVER_ADMINサーバー管理者情報
SERVER_NAMEサーバー名
SERVER_ADDRサーバーのアドレス
SERVER_PORTサーバーのポート番号
SERVER_PROTOCOLプロトコルバージョン
SERVER_SOFTWAREサーバーソフトウェア
システム関連TIME_YEAR
TIME_MON
TIME_DAY
TIME_HOUR
TIME_MIN
TIME_SEC
TIME_WDAY曜日 (0:日 ~ 6:土)
TIME年月日時分秒 (例:20130123123456)
特別なものAPI_VERSIONAPIバージョン
THE_REQUESTリクエスト文字列
REQUEST_URIリクエストURI
REQUEST_FILENAMEリクエストされたファイル名
IS_SUBREQサブリクエストか否か
HTTPSHTTPSでのアクセスか否か

下で記述しますが、それぞれの変数を利用したサンプルは別稿で説明したいと思います。

条件パターン

条件パターンには正規表現を記述します。 上記の変数に代入されている文字列と比較する正規表現です。

使い方のサンプル

ここまで RewriteCond について概要/仕様を説明をしてきました。 本連載では下記の記事で具体的な使い方とサンプルを説明しています。 是非、続けてそちらの記事もご覧頂ければ、より具体的な使い所がご理解頂けると思います。

おわりに

本稿では RewriteCond の概要について説明しました。 皆様のお仕事のお役に立てれば幸いです。

Apache httpd 入門へ戻る

著者 : OSCA

OSCA

 初級WEBエンジニアです。最近は Android, iOS, WEBアプリの作成に力を入れています。 個人として何か一つでも世の中の多くの人に使ってもらえるアプリを作ろうと日々奮闘中です。