.htaccessで使える正規表現・環境変数・mod_rewriteについて

.htaccessで使える正規表現・環境変数・mod_rewriteについて

.htaccessの中で使える正規表現や環境変数、mod_rewriteについて、備忘録も兼ねてまとめました。

mod_rewriteとモジュールの意味

mod_rewriteとは、Apacheというサーバで利用されているURLの書き換え・リダイレクト処理を行うモジュールです。
「.htaccess」で記述して使用できます。

mod_rewriteモジュールには、

  • RewriteEngine
  • RewriteCond
  • RewriteRule
  • RewriteBase

などがあります。

リダイレクトを開始するRewriteEngine

RewriteEngine on でこれからURLのリダイレクトを行うことを示します。

リダイレクト条件を指定するRewriteCond

URLリダイレクトを行う条件を指定します。

markup
RewriteCond %{HTTPS} off

(HTTPS通信ではない場合)

URLパターンと転送先を指定するRewriteRule

合致するURLと転送先を指定します。

markup
RewriteRule ^(.*)$ https://(新URL)/$1 [R=301,L]

どんなURLでも、https://(新URL)に301リダイレクトします。

ベースとなるディレクトリを指定するRewriteBase

markup
RewriteBase /

リライト処理のベースとなるURLを指定します。
これがない場合は.htaccessがあるディレクトリになります。
「RewriteBase /」と記述しておくとルートからのパスになります、わかりやすくなるのでおすすめです。

mod_rewriteモジュールの宣言方法

mod_rewriteモジュールを使用する場合は
使用するコードを以下のように<IfModule mod_rewrite.c>〜</IfModule>で囲みます。

other
・・・ここにリライトモジュールを記載する・・・

mod_rewriteでは正規表現が使える

mod_rewrite内では正規表現が使うことができます。
よく使うものは以下の通りです。

!否定
\エスケープ文字(正規表現として認識しない)
.*全て

フラグ

RewriteRuleの最後にフラグ[]を追記することができます。

markup
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
R=301RはリダイレクトのR
「R=301」とすると、301リダイレクトを指定する。
LLastのL
L が指定されている RewriteRule の条件にマッチした場合、以降のRewriteRuleを処理しない。
ただし.htaccessではLフラグが有効にならないので、つけても意味はない。
NC大文字小文字を区別しない(指定しなかった場合は区別する)

OR条件

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

条件①と条件②いずれかを満たす場合、リダイレクトを行う。

AND条件

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

[OR]フラグを記載せず、2行続けてRewriteCondを記載する場合、条件①と条件②の両方を満たす場合リダイレクトを行う。

RewriteCondでのパーセント記号(%)は環境変数

RewriteCondでのパーセント記号(%)は、環境変数を表します。
{}の中に接続してきたブラウザなどの情報から、環境変数名を読み込んで使用することができます。

markup
RewriteCond %{HTTP:X-Forwarded-Proto} !https

%{HTTP:X-Forwarded-Proto} = HTTPヘッダを取得する

その他の環境変数は以下の通りです。

グループ変数名値・意味
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でのアクセスか否か

表はApache RewriteCond の基礎知識から引用させていただきました。

あなたへのおすすめ