無料Wikiサービス | デモページ
Linuxなどのメモ書き
検索

Adsense

mod_rewriteの使い方 の差分
Rev.2→最新版  追加箇所 削除箇所


mod_rewriteを使用することで、アクセスのあったURLを自在に書き変えることができる。URLのえをなうことでURLクエリ文字列けて動的にページを生成するような場合(http://xxxx/index.php?id=xx)(えばhttp://xxxx/index.php?id=xx)でも静的ページURLに見せかけることができる。

mod_rewriteを使うには

mod_rewriteモジュールをロードする必要があるのでhttpd.confに以下を追加する。(Apache2.x系)

LoadModule rewrite_module modules/mod_rewrite.so

次にRewriteEngineの動作を有効にする。

RewriteEngine on

以上でURLの書き変えが有効になる。

後は書き変えルールを定義すればよいしていけばよいここでは以下形式URL
ここでは以下形式URL
http://www.xxxx.com/april/index.php?pg=pagename
("april""pagename"可変とする)

アクセスするページ
のような形式でもアクセスできるようにする(クエリ文字列URLみこまれている)
http://www.xxxx.com/april/pg/pagename/

この場合ルールとして以下追加する2カラム

http://www.xxxx.com/april/index.php?pg=pagename
("april"と"pagename"が可変とする)

以下のような形式でもアクセスできるようにする(クエリ文字列がURLに組みこまれている)。

http://www.xxxx.com/april/pg/pagename/

この場合、書き変えルールとして、以下の行を追加する。

RewriteRule ^/(.+)/pg/(.*)$ /$1/index.php?pg=$2 [L]

[L]はこのルールRewriteRule文法以下のとおり$1,$2,..$n正規表現()った部分にマッチしたらえを終了するした文字列参照できる
複数RewriteRule定義されていた場合Lフラグがないとマッチしてえた後次ルール


httpd.conf

RewriteRule <正規表現> <書き変え後のURL> [<フラグ>]

RewriteRuleは正規表現にマッチしたURLを書き変える。複数のRewriteRuleが定義されていた場合、マッチしてもしなくても次のルールに進んで評価を行なう。上記の例の最後の[L]はフラグで、このルールにマッチしたら書き変えを終了(次のルールには進まない)することを意味する。


httpd.confの例
    <略>

LoadModule rewrite_module modules/mod_rewrite.so

<略>
<VirtualHost *:80>
ServerAdmin tomita@localhost.localdomain
DocumentRoot /usr/local/apache2/htdocs
ServerName localhost.localdomain
ErrorLog logs/localhost-error_log
CustomLog logs/localhost-access_log common
RewriteEngine on
RewriteRule ^/(.+)/pg/(.*)$ /$1/index.php?pg=$2 [L]
</VirtualHost>

ログの採取

変換動作の確認やデバッグを行なうにはログを採取するとよい。ログに変換の過程が出力される。ログを採取するにはRewriteLogでログファイルを指定し、RewriteLogLevelでログの採取レベルを指定する。9が最も詳細なログを取り、0はログを採取しない。

RewriteLog /tmp/rewrite.log
RewriteLogLevel 9




[関連ページ]
mod_rewrite - QSAフラグ