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を操作するためのスイス製のアーミーナイフ」だ。

3iXの評価

2006/12/23 | 海外サーバ

3iXでアプリを書いてみた。印象は・・・FTPが遅い。これにつきる。
FTPソフトを立ち上げ接続操作をして、実際に接続できるまで10秒ほどかかることがある。ファイルのアップロードも同じ。今、国内のレンタルサーバをいくつか借りてるけれど、そのどれと比較しても明らかに遅い。ちなみに現在頻繁に使用しているレンタルサーバ、VPS等々は以下のサービス。
[専用]PROX
ロリポ
チカッパ
[VPS]WebArena
[VPS]使えるネット

まぁ、遅いのは遅いが、ウェブに関してはそれほどの問題がないのでよしとしている。アメリカのサーバ事情をよく知らないのでなんともいえないけど、バックボーンの太さとか、日本アメリカ間の回線の問題とか、その他諸々関係あるかもしれない。

コントロールパネルに関してはまだあまり使っていないのでなんとも言えないけど、多少の知識があれば、普通にウェブを作る分には何の問題もなさそう。MySQLはphpMyAdminから操作できるし、不都合を感じない。mod_rewrite、phpのmbstringモジュール、htaccess設定等ひととおり使えるので、特に問題ない。アメリカのサーバに関して言えば、phpのmbstringモジュールはだいたいが対応しているような感じ(日本語だけじゃなくて、韓国語とかその他のマルチバイト文字も大丈夫そう)。

使い倒さないといけないな。

また海外サーバを借りてみた「3iX」

2006/12/18 | 海外サーバ

諸々の事情でまた海外サーバ(ホスティング)を借りてみた。
今回借りたのは3iX。前回のdot5hostingではさんざんな目にあって苦労したが今回はどうか。
今回はまぁなんとスマートなこと!。申し込み完了後すぐに使えるようになりました。申し込み手順は日本となんら変わらず。
 (1) プランを選んで
 (2) ドメインを指定して
 (3) 諸情報を入力して
 (4) カード決済する
手順どおりにやればメールで設定内容が送られてきます。あとはDNSサーバの設定さえしておけば大丈夫(ドメインは別のところで取っているのでどうするのかわからない)。
ここのコントロールパネルはcPanelといわれるもの。メジャーな管理ツールのひとつだ(使ったことないからこれからいろいろ試してみるとする)。

さてサービスを立ち上げよう!。

Google Mapsから日本語Geocoding・・・復活?

2006/12/15 | JavaScript/Ajax

先週・今週と地図系の仕組みのイベントがあった。先週はオープンGISツール関連のOSGeo財団の設立記念イベント、今週は情報地質学会。いずれも地理情報を扱ったものがテーマだ。
ムック本「超極めるPHP」にMapServerというフリーの地図表現システムの記事があったけど、その進化版といった感じ。プログラムはどうやらPHPが結構使われているとのことだった。
そのイベントでの一番の収穫!。停止されていたGoogle Mapsの日本語Geocoding機能がとうとう復活したらしい。一週間ほど前から復活したとのことだった。今までいろいろ技を駆使して日本語Geocodingしてきたわけだが、もうそんな苦労はいらない(APIの説明はここから)。これが一時的でないことを祈るとしよう。

postならpostだけ、getならgetだけ

2006/12/06 | HTML_QuickForm

いつも便利に使っているHTML_QuickForm。
しかし特殊なことをしようとすると、うまくいかないことがある(もちろんいろいろ回避する方法はある)。

QuickFormのオブジェクトを生成する際に、以下のようにpostを指定した。
$myForm=& HTML_QuickForm(‘myForm’,’post’);

ここで例えばエレメントを以下のように追加した。
$myForm->addElement(‘text’,’myTextBox’,’Input text’);

このように記述したphpスクリプトに対して、以下のクエリをつけてアクセスしてみた(もちろんgetで)。
?myTextBox=abcd

いちおうテキストボックスには「abcd」という値が入って欲しいと思っていたのだが、そううまくはいかなかった。結果としてわかったことは・・・。
「postならpostで渡った値だけ、getならgetで渡った値だけ!」

当たり前といえば当たり前なんだけど・・・。少しだけはまりました。


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