ホーム > ネット > .htaccess 使い方 RewriteRule 書式 変数名 一覧
目次 | 元のページ 前のページ | 次のページ サイトマップ | ページEND

.htaccess 使い方 RewriteRule 書式 変数名 一覧


.htaccess 使い方 RewriteRule 書式 変数名 一覧



RewriteRule は、IE等ブラウザからアクセスされた際、そのアクセス時の URL を書き換えるルールを定義するディレティブで、条件パターンで一致した値を置換文字列で書き換えます

条件パターンは、Perl互換の正規表現で指定します




RewriteRule 書式



書式 RewriteRule 条件パターン 置換文字列 [フラグ]
記述例 RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . %1/%2 [R=301,L]
説明 RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
サーバ変数「REQUEST_URI」を参照して、「^(.*)//(.*)$」 という記述があれば RewriteRule  に記述したルールを実行します

「REQUEST_URI」は、「ブラウザから送られてきたリクエスト(閲覧要求)のURI」を返しますので、「http://example1.com/文字列1/文字列2.html」 でリクエストされた場合、ドメインの部分を抜いた 「/文字列1/文字列2.html」 が入っています

「^(.*)//(.*)$」 は、行頭(^)から、任意の一文字の繰り返し(.*)、スラッシュ2つ(//)、任意の一文字の繰り返し(.*)が行末($)という意味になります
つまり、リクエストされた URI 文字列の中に、「/文字列1//文字列2.html」 のように 「//」 という文字列が含まれる場合、後に続く RewriteRule が実行されます
RewriteRule . %1/%2 [R=301,L]
この例では、「//」 の前にある文字列 「文字列1」 が 「%1」 に、「//」 の後ろにある文字列 「文字列2」 が 「%2」 に入っていますので、RewriteRule を実行することにより、URI の該当する箇所が 「/文字列1/文字列2.html」 に書き換わります

[R=301] は、ステータスコードを恒久的に転送するという意味の 「301」 (恒久的な移動)に設定します

[L] は、Rewrite機能によるURL変換を終了します (後のルールが適用されなくなります)
(改行コード)
最終行は必ず改行し、改行コードのみの空行とします
補足 条件判定 実行順序について
RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . %1/%2 [R=301,L]

「RewriteCond」 文と 「RewriteRule」 文を組み合わせて使用する場合、条件判定、URL 書き換えの実行順序は、下記になります

「RewriteRule」 文の条件が最初に判定されます
(この例では、任意の一文字「.」があれば、条件に合致しますので、無条件にという意味になります)
②③ 「RewriteCond」 文の②が③の条件を満たしているか判定されます
①、②③の条件を全て満たしている場合にのみ、④が実行されます




RewriteRule フラグ



RewriteRuleで利用できるフラグは、RewriteRule の挙動を制御するための指定です


フラグ 意味
B 英数字のエスケープ、いわゆるURLエンコード (&を%26など)
chain | C 次の処理を連続して行う場合に指定する (チェーン)
RewriteCond の 後ろの RewriteRule は、一行しか有効ではありません
複数の RewriteRule を記述したい際は、RewriteCond と RewriteRule のセットを複数記述するか、「C」フラグを記述して、ルールの継続を明示する必要があります
記述例  : RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . example1[C]
RewriteRule . example2
cookie | CO=NAME:VAL Cookieをセットすることができる
書式 : CO=NAME:VAL:domain[:lifetime[:path[:secure[:httponly]]]]
discardpath | DPI PATH_INFOの削除
PATH_INFOとは実際のスクリプトファイル名とクエリ文字列の間にある、クライアントが提供するパス名情報
END リライト処理を停止する
Lはルールセットだけだが、ENDの場合は.htaccess単位で終了するので後のリライトは無効になる (v2.2では使えなくなったようです)
env | E=[!]VAR[:VAL] 環境変数をセットできます
セットするときは[E=VAR:VAL]、削除するときは[E=!VAR]とする
例)hogeという閑居言う変数にhugaを入れる [E=hoge:huga]
forbidden | F クライアントに 403 Forbiddenステータスコードを返す
gone | G クライアントに 410 Goneステータスコードを返す
Handler | H=Content-handler 実行するアプリケーションを指定するハンドラを強制的に付ける
application/x-httpd-phpなど
設定ファイルでAddType application/x-httpd-php .phpとしておけば同じハンドラの場合はPHPプログラムとして実行されてる
last | L Lフラグが付くとそこでルールセットが停止する
直後に続くルールを実行しない
next | N 書き換えを行ったら、ルールセットの最初からやり直す
nocase|NC no case
大文字小文字を区別しない
noescape | NE noescape
エスケープをしなくなる
通常は&や%はURLエスケープされるが、このフラグを使うとエスケープせずにそのままの文字になる
nosubreq | NS 現在のリクエストがサブリクエストの場合はルールをスキップ
proxy | P ルールに一致したリクエストをプロキシを介して処理する
以降の処理はプロキシに渡るのでLフラグと同じようにルールの進行は停止する
passthrough | PT uri フィールドに filename フィールドの値をセットする
直後にmod_aliasでディレクトリ構造の書き換えを行う際などに利用する
qsappend | QSA クエリ文字列部分に書き換えではなく、文字を追加したい場合に指定する
通常「?」後のクエリ文字列は削除されるため利用する
qsdiscard | QSD クエリ文字列がある場合削除される (これはデフォルトの動作)
redirect | R[=code] クライアントに外部へのリダイレクトとレスポンスコードを返す
何も指定しないと302で返す
[L=301]等とすればレスポンスコードを変更できる
skip | S=num 指定した数のルールをスキップする
[s=2]とすれば、一致した場合、以降のルールを2つ飛ばす
if-then-elseを実現できる
type | T=MIME-type 一致した項目にMIME-typeを付加する (AddTypeと同じ挙動)





301 リダイレクト (恒久的な移動) と 302 リダイレクト (一時的な移動)



記述場所
.htaccess
記述内容
恒久的に移転する場合 (301リダイレクト) 301リダイレクトは、恒久的に移動するという意味で、ドメインを変更したり、ページのアドレスを変更した場合等で固定的に変更する場合に使用します
Redirect permanent 「転送元」 「転送先」
一時的に移転する場合 (302リダイレクト) 302リダイレクトは、一時的に移動するという意味で、期間限定のイベントやキャンペーンなどで一時的にリダイレクトしたい時等に使用します
Redirect temp 「転送元」 「転送先」

どちらを使用しても、アクセスされた瞬間に自動転送され、転送元のURLがブラウザの履歴に残らない点も同じで、両者の違いは、(ブラウザなどに)通知される転送理由(HTTPステータスコード)が、前者では「恒久的な移動」(301リダイレクト)で、後者では「一時的な移動」(302リダイレクト)だという点のみです

ブラウザの動作はどちらも同じですが、検索サイトのデータベースへの登録には影響する可能性があり、「ずっと移転する」(=転送先URLを登録して欲しい)なら前者を、「今だけ移転する」(=転送元URLを登録して欲しい)なら後者を使います

目次 | 元のページ 前のページ | 次のページ サイトマップ | ページTOP
ホーム > ネット > .htaccess 使い方 RewriteRule 書式 変数名 一覧
   

© 2014 abhp.net All Rights Reserved.

参考情報


Apacheのmod_rewriteモジュールの使い方を徹底的に解説 OXY NOTES

ページTOP
ページTOP
ページTOP
ページTOP