.htaccess - ヘッダ環境変数 HTTP headers

HTTP_USER_AGENT

HTTP_USER_AGENT は、クライアントのプラットフォーム、バージョン情報、ブラウザの情報が含まれます。以下は、HTTP_USER_AGENT の一例です。

# Windows - Internet Explorer
Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
HTTP_USER_AGENT の一例

プラットフォームやブラウザの種類やバージョンによって情報が異なるため、指定漏れがないように注意が必要です。特定のプラットフォームやブラウザのバージョンを問わず指定する場合は "Windows" や "Chrome" などの文字列を指定する必要があります。ただし、HTTP_USER_AGENT はクライアント側が設定する情報であり、ブラウザのプラグインなどにより詐称が可能です。また、各サイトを巡回してページ情報を収集する "クローラー" も HTTP_USER_AGENT を使用している場合があります。

# Rewriteエンジンを起動
RewriteEngine On

# HTTP_USER_AGENT に iPhone が含まれる場合、iPhone 用のページにリダイレクトする。
RewriteCond %{HTTP_USER_AGENT} iPhone [NC]
RewriteRule ^(.*)$ iphone/$1 [R,L]
iPhone 専用ページにリダイレクトする例

HTTP_REFERER

HTTP_USER_AGENT は、参照元の URL 情報が含まれます。例えば、Google の検索結果画面から訪れた場合は、Google の URL 情報が含まれています。ただし、ダイレクトアクセスなどで訪れた場合は、情報が含まれないケースがあります。以下は、HTTP_USER_AGENT の一例です。

# Google の検索結果から訪れた場合
https://www.google.co.jp/
HTTP_REFERER の一例
# Rewriteエンジンを起動
RewriteEngine On

# murashun.jp ドメイン以外からの画像のリンクは許可しない
RewriteCond %{HTTP_REFERER} !^http://(www\.)?murashun.jp [NC]
RewriteRule \.png$ - [F]
画像の Hotlink (直接リンク) に対して403エラーを返す例

HTTP_COOKIE

HTTP_COOKIE は、Cookie 情報が含まれます。Cookie は名前と値がセットになっていて、変数には両方が格納されています。また、Cookie は一部の文字がエンコードされているため指定の際には注意しましょう。

# Cookie名 = Cookie値; ... で参照される
name=murashun; id=123456; date=2015%2F02%2F05;
HTTP_COOKIE の一例
# Rewriteエンジンを起動
RewriteEngine On

# Cookie の id が数字6桁でない場合は403エラー
RewriteCond %{HTTP_COOKIE} !id=[0-9]{6}
RewriteRule ^(.*)$ - [F]
Cookie manipulation attack に対する防御例

HTTP_FORWARDED

HTTP_FORWARDED は、経由したプロキシの種類やバージョン情報が含まれます。ただし、プロキシサーバを経由していない場合は、情報が含まれないケースがあります。

# 経由したプロキシの種類やバージョン情報
by http://ProxyServer:8080/ (Squid/1.0.20) for 10.20.30.40
HTTP_FORWARDED の一例
# Rewriteエンジンを起動
RewriteEngine On

# プロキシサーバを経由した場合403エラー
RewriteCond %{HTTP_FORWARDED} !^$
RewriteRule ^(.*)$ - [F]
プロキシサーバを経由の閲覧を許可しない例

HTTP_HOST

HTTP_HOST は、リクエスト先のホスト名 (DNS 名) 情報が含まれます。

# 接続先ホスト名
murashun.jp:80
HTTP_HOST の一例
# Rewriteエンジンを起動
RewriteEngine On

# URL の www を省略する
RewriteCond %{HTTP_HOST} ^www\.murashun\.jp
RewriteRule ^(.*)$ https://murashun.jp/$1 [R,L]
URL の www を省略する例

HTTP_PROXY_CONNECTION

HTTP_PROXY_CONNECTION は、プロキシの接続情報が含まれます。プロキシサーバを経由する時、クライアントからのヘッダ情報をそのままサーバに渡す "End-to-End" 方式か、ヘッダ情報を変化させて渡す "Hop-by-Hop" 方式の2種類あります。HTTP_USER_AGENT などはクライアントの情報がそのままサーバに渡される End-to-End 方式ですが、HTTP_PROXY_CONNECTION はプロキシサーバの情報が渡される Hop by Hop 方式です。

# プロキシの接続情報
"", keep-alive, close など
HTTP_PROXY_CONNECTION の値

HTTP_ACCEPT

HTTP_ACCEPT は、ブラウザがサポートするメディア・MIMEタイプ情報が含まれます。例えば、ブラウザが HTML をサポートする場合は "text/html" と表記されます。"*/*" は表記以外すべてのメディアを示します。また、サポートするメディアには ; に続けて "品質値" を書くことで優先度を定義できます。品質値を省略した場合は "1" になります。

# ブラウザのサポート形式
text/html,application/xhtml+xml,*/*;q=0.5
HTTP_ACCEPT の値
# Rewriteエンジンを起動
RewriteEngine On

# HTMLをサポートしていない場合は403エラー
RewriteCond %{HTTP_ACCEPT} !text/html [NC]
RewriteRule ^(.*)$ - [F]
HTMLをサポートしていない場合に403エラーを返す例

関連記事

Category:
プログラミング
公開日:
更新日:
Pageviews:
18
Shares:
0
Tag:
.htaccess
Apache
HTTP
Server