■mod_rewrite は Apache の機能であり、モジュールを組み込むことで利用できる。
URL(ドメイン以下のパス)のリダイレクトや偽装、置き換えなどが行える。
一般的な正規表現を利用して RewriteRule を書くことができる。
・mod_rewrite.so
・httpd.conf にLoadModule rewrite_module modules/mod_rewrite.so
■RewriteCond
「RewriteCond」は、RewriteRule を実行するための条件を定義するための記述です。
RewriteCond に記述した条件が満たされた時のみ RewriteRule に書いたURLの書き換えと転送が実行されるようにできます。
RewriteCond は、RewriteRule の記述部の前に複数個記述することができます。 RewriteCond を複数記述した場合には、複数の条件が全て一致した場合に RewriteRule を実行するのか(AND)、複数の条件のいずれかが一致した場合に実行するのか(OR) も指定することができます。
RewriteCond %変数名(テスト文字列) 条件パターン(正規表現) [フラグ]
RewriteCond %変数名(テスト文字列) 条件パターン(正規表現) [フラグ]
RewriteCond %変数名(テスト文字列) 条件パターン(正規表現) [フラグ]
RewriteRule ここにRewriteRuleのURL書換&転送設定を記述
RewriteCond を複数指定した場合に AND/OR を切替えます。
フラグを記述せずに RewriteCond を複数行記述した場合は AND になります。
フラグに [OR] と記述した場合は OR になります
RewriteCond の条件比較を大文字と小文字を区別するか否かを切替えます。
[NC] と記述することで大文字と小文字を区別しなくなります。 (=NCを指定しないと区別します)
グループ 変数名 値・意味
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_VERSION APIバージョン
THE_REQUEST リクエスト文字列
REQUEST_URI リクエストURI
REQUEST_FILENAME リクエストされたファイル名
IS_SUBREQ サブリクエストか否か
HTTPS HTTPSでのアクセスか否か
■RewriteRuleの書き方
RewriteEngine on
RewriteRule (.+)\.html$ /item/view.php?p=$1 [L]
この場合、Aにアクセスすると、Bを実行する。
ブラウザの表示は Aのまま。
RewriteCond %{REMOTE_ADDR} ^12\.34\.56\.78$ [OR]
RewriteCond %{REMOTE_ADDR} ^87\.65\.43\.21$
RewriteCond %{REQUEST_URI} !^sorry\.html
RewriteRule .* /sorry.html
★= を使うと文字列として扱い、正規表現無効になる
Translation:
IF their IP address is 12.34.56.78
OR their IP address is 87.65.43.21
AND the request is not for sorry.html
THEN display the sorry.html page
RewriteCond %{REMOTE_ADDR} != 118.238.11.48|49|5[0-9]|6[0-3]
■■■■■Address Prefix
202.12.30.115というIPアドレスに対してネットマスク(境目を示す目印のようなもの)が255.255.255.0であった場合、
先頭から24ビット(3オクテット)までがネットワークを表し、後の8ビットはその中のホストを識別するために使われています。
この先頭から24ビットまでをアドレスプリフィックスと呼びます。アドレスプリフィックスはしばしば/(スラッシュ)を伴ってプリフィックス長とともに表記されます。
この例だと、202.12.30.0/24 あるいは 202.12.30/24 のように表記します。
/28==>11111111.11111111.11111111.11110000(255.255.255.)前から28位
1111=>16