mojaviのURLを少し短くするmod_rewrite

2006/12/29 | mojavi2

検索エンジン対策のためにPATH_INFOを使ってプログラムを使用していることを隠蔽するというのは、mojaviでも設定ファイルひとつで対応可能だ。でもこの方法だと、URLが結構長くなってしまう。例えばmoduleAのactionBにアクセスするには、以下のような具合だ。

/index.php/module/moduleA/action/actionB

これをさらに短くするためにURL書き換え機能(mod_rewrite)を使うわけだが、このmod_rewrite、強力なURL書き換え機能を持っているだけに、設定の記述も難解だ(今まではあえて避けてきた)。
たまたま必要に迫られて検索をかけると、見事なのを見つけた。以下のように書いておけばいい。

RewriteEngine On
# to avoid problems with exsisting files
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.* – [L]
# rewrite broken relative image paths
RewriteRule ^.+(images|scripts|files)/(.*)$ /$1/$2 [L]
RewriteRule !^ind/? – [C]
RewriteRule ^([^/]+)/([^/]+)/(.*) /ind/$3?module=$1&action=$2
RewriteRule ^ind/([^/]+)/([^/]+)(.*)$ /ind$3?$1=$2 [QSA,N]
RewriteRule ^ind/?$ /index.php [QSA,L]

この設定により、上記のURLが以下のようになる。
/moduleA/action1

2つを見比べると短さは一目瞭然!。
/index.php/module/moduleA/action/actionB
/moduleA/actionB

そしてパラメータ(QUERY_STRING)を指定する場合も、以下のように指定すればOK。
/moduleA/actionB/param1/value1/param2/value2・・・

出展はこちら
これによるとパラメータを10以上つけるようなことがある場合は、以下の一行を付け加えておく必要があるとのことだ。

RewriteOptions MaxRedirects=25

よくはわからないけど、[QSA,L]の記述により、パラメータの個数だけ内部的に(mod_rewrite複数回呼び出しみたいな・・・)再読み込みするらしい。んで、再読み込みの回数の上限は9回だから、パラメータが9より多い場合は上記の1行で上限回数を増やす必要があるようだ。

すばらしい。
まさに「URLを操作するためのスイス製のアーミーナイフ」だ。

コメントを残す


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net