.htaccessを使ったリダイレクト

httpをhttpsに統一の場合 (※最終行の改行も必要)

RewriteEngine On

# httpをhttpsに統一
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

他のページへのリダイレクト

RewriteEngine on
RewriteRule ^abc.html$ http://abc.com/xyz.html [R=301,L]

説明

  • パス指定で[R]が無ければリクエスト先を変えるだけ
  • [R]がある場合やhttpから指定している場合はリダイレクト
  • [R=301]指定している場合は301リダイレクトとなる
  • ^ は文字の始まりを意味し、 .* は任意の文字の連続、つまり全ての文字列にマッチします
  • リクエストされたパスをリダイレクト先でも使いたいので (.*) とカッコでくくり後方参照の$1とすることで 同じパスの違うドメインにリダイレクトできます
    例:RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
  • [NC] と記述することで大文字と小文字を区別しなくなります(=NCを指定しないと区別します)
  • # アドレスバーを書き換えない(forward)リクエストはindex.phpに
    RewriteRule ^(.*)$ index.php
    # 302リダイレクト
    RewriteRule ^(.*)$ index.php [R]
    RewriteRule ^(.*)$ index.php [R=302]
    RewriteRule ^(.*)$ https://www.my-domain.com/index.php
    # 301リダイレクト
    RewriteRule ^(.*)$ index.php [R=301]
    RewriteRule ^(.*)$ https://www.my-domain.com/index.php [R=301]
    
    

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

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

期間を指定してアクセスを転送する

  • 記述上の注意点は、比較演算子は”>=”や”<="がありません。 また、比較演算子の後にスペースを入れるとエラーになりました。
RewriteCond %{TIME_YEAR}%{TIME_MON}%{TIME_DAY} >20130901
RewriteCond %{TIME_YEAR}%{TIME_MON}%{TIME_DAY} <20130903
RewriteRule ^/campaign1.html$ /close.html [R=302,L]

RewriteRuleのフラグ

フラグ 意味 説明
C Chain このルールにマッチしたら、次のルールを評価
F Forbidden アクセス禁止(403-Forbidden)。[L]フラグと同様、以降のルールは無視される
G Gone 削除(410-Gone)
L Last マッチしたらRewriteを止めます。以降のルールは無視!
NC No Case 大文字小文字を無視
NE No Escape ".", "?", "%"などの特殊文字が"%25″のようにエンコードされるのを防ぐ
OR Or RewriteCondを複数指定する場合のor指定。指定なしならAND
PT Path Through Rewriteを終了し、それ以外の処理に移行
R Redirect 指定したURLにリダイレクト。[R=303]のようにリダイレクトコードも付加できる。[L]フラグと同様、以降のルールは無視される

変数名

  • 変数名には Apache httpd が用意している以下の変数が利用できます。 何を条件にしたいのかを考えて、利用する変数を選定してください。
グループ 変数名 値・意味
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でのアクセスか否か