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でのアクセスか否か |