▼ [Apache] mod_rewrite の小技
2007/08/13 0:22
ループ処理
mod_rewrite でループ処理を行うには、[N] (next) フラグを利用する。たとえば、/hoge/1/bar/2/baz/3/ を /hoge/index.cgi?foo=1&bar=2&baz=3 としたい (その際、パラメータの個数が不定) 場合、下記の通り記述する。"QSA" (query string append) フラグは、書き換え後の QUERY_STRING 部分のみ "追加" の扱いとする。
RewriteEngine on RewriteLog /var/log/httpd/rewrite.log RewriteLogLevel 9 # Rule 1: RewriteRule ^(/hoge/.*/)([^/]+)/([^/]+)/$ $1?$2=$3&path=$1 [QSA,N] # Rule 2: RewriteRule ^/hoge/([^/]+)/$ /hoge/index.cgi?foo=$1 [QSA]
処理の流れは以下の通り。
- path = "/hoge/1/bar/2/baz/3/", QUERY_STRING="" → Rule 1
- path = "/hoge/1/bar/2/", QUERY_STRING="baz=3" → Rule 1
- path = "/hoge/1/", QUERY_STRING="bar=2&baz=3" → Rule 2
- path = "/hoge/index.cgi", QUERY_STRING="foo=1&bar=2&baz=3"
日本語のファイル名に見せかけてSEO
ファイル名はSEOを考慮すると日本語 (UTF-8) で付けた方が良いが、日本語のファイル名はUnix上で扱いづらいという欠点がある。mod_rewrite を利用することで URL path中の日本語文字列を任意のファイル名 (英数字) にマッピングすることができる。
- httpd.conf に以下の行を追加
RewriteEngine on RewriteLog /var/log/httpd/rewrite.log RewriteLogLevel 9 RewriteMap foo_kanji_ascii txt:/www/etc/map/naiyo_kanji_ascii.txt RewriteRule ^/(.*[^!-~]+.*) /www/htdocs/${naiyo_kanji_ascii:$1}.html - /www/etc/map/naiyo_kanji_ascii.txt に UTF-8 で以下の内容を記載。
萌え moe
- httpd の再起動。
- http://www.example.com/%E8%90%8C%E3%81%88 へアクセスすると /www/htdocs/moe.html の内容が表示される。
大規模に書き換えを行う場合には、性能上の観点からテキストファイルではなくDBMファイルで用意することが望ましい。
▼ コメント(0件)
- TB-URL(確認後に公開) http://diary.asuka.net/028/tb/
