2009年06月26日 18:57

mod_rewriteメモ

| TB http://www.kantenna.com/cgi-bin/mt/mt-tb.cgi/467

mod_rewriteのマニュアル読みながらメモ。

Redirect と RedirectMatch

RedirectとRedirectMatchはApacheのmod_aliasの機能で mod_rewriteとは関係ないようだ。どうりで構文が違うわけだwなんかすっきりした。

mod_rewrite

主に正規表現を利用してURLを置換する。

RewriteEngine On

mod_rewriteを有効にする。 ただしapache(httpd.conf)でmod_rewriteが読み込まれて無いと 利用できないので下記のようにするとよさげ。


<IfModule mod_rewrite.c>
    RewriteEngine on
 </IfModule>

RewriteRule


RewriteRule パターン 置換対象

パターンにマッチした場合、置換する。

パターン

POSIX互換の正規表現が利用できる。

フラグ


RewriteRule ^/$  /test.html [L]

最後にある[]のことをフラグという。 設定可能なフラグは以下となる。

[redirect|R=code]

最もよく使うフラグのひとつ。外部にリダイレクトする場合このフラグをつけます。 [R=code]とすることでレスポンスコードを指定できます。 指定しない場合302が返されます。

レスポンスコードによる指定

300~400の間で任意に指定できる。


[R=301]

シンボルによる指定

以下の3つを指定できる


[R=temp] // デフォルト [R] と等価
[R=permanent] // [R=301] と等価
[R=seeother] // [R=303] と等価

303の意味がよくわからない・・・

[forbidden|F]

URLを強制的にアクセス禁止にする。レスポンスコード403が返される。 RewriteCond といっしょに使うと良いらしい。

[gone|G]

URLを強制的に消去済み(gone)にする。 レスポンスコード410が返される。

移転も代替コンテンツもない場合に使うっぽい。

[proxy|P]

Apacheにプロキシモジュールが組み込まれていることが条件。

ちょっと気になるフラグ。 どうも外部のコンテンツを返すことができるっぽい。 そのうち調べてみたいです。

[last|L]

これもよく見かけますね。 ここで書き換え処理を中止し、それ以上の書き換えルールを適用しないようにする。

[next|N]

よくわかりません。

[chain|C]

よくわかりません。

[type|T=MIME-type]

MIME type の強制指定。ターゲットファイルの MIME タイプを強制的にMIME-typeにします。

これは意外と使えそうな気がする。(こんな感じで使えそう)

[nosubreq|NS]

よくわかりません。

[nocase|NC]

パターンについて大文字小文字を区別しないようにする。

[qsappend|QSA]

クエリ付きのURLを書き換える時に重宝するっぽい。

このフラグは、置換文字列の中でマッチしたものを書き換えるのではなく、 そこにクエリー文字列部分を追加するように、書き換えエンジンに強制 します。書き換えルールを通してクエリー文字列に何かデータを追加したい 場合にこのフラグを使います。

[noescape|NE]

mod_rewrite が書き換え結果に対して通常行なわれる URL エスケープルールを適用しないようにする。 エスケープされたURLを利用したい時に利用する。

[passthrough|PT]

よくわかりません。

[skip|S=num]

次のnum番目の処理をスキップする。 条件分岐(if-then-else)を作り出すことができるらしい。

複雑なことする場合に使うと便利なのかも。

[env|E=VAR:VAL]

環境変数を強制的に変更したい場合? 面白そうではあるがちょっとよくわからない。

参照サイト

RewriteCond


RewriteCond テスト文字列 条件パターン

RewriteRuleの前に記述することで以降のRewriteRuleは 自身のパターンとRewriteCondのパターンを満たした場合のみ置換される。

条件パターン

正規表現を利用。ちょっと拡張されている。 例えばwordpressの.htaccessにある下記。


RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

%{REQUEST_FILENAME}がディレクトリまたはファイルでない場合に置換される。

なので逆に言うとwordpressが使っているURLとおなじディレクトリやファイルを 実体としておくとそっちが表示されるようになる(はず)。

Apacheハンドブック

著者 : Ben Laurie / 金額 : ¥ 4,830

mod_rewriteメモタグ:

トラックバック

  • http://www.kantenna.com/cgi-bin/mt/mt-tb.cgi/467
[情報備忘録]2009年06月27日 01:08
RewriteRule Tフラグ
RewriteRule Tフラグの使い方について探ってみた
コメント (0)
コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)





この情報を登録しますか?


先月アクセスが多かったページ