URIがスラッシュで終わっているときにデフォルトでadiary.cgiを読ませてやりたいと思っていて、いままでうまく動かせていなかった。
Apacheの.htaccessに仕掛けをするんだろうなー、と思っていて、これまではDirectoryIndexを使っていました。
つまり、ブラウザのURIを表示するところにhttp://www.tokuda.net/diary/と表示するのではなくて、http://www.tokuda.net/diary/adiary.cgiと表示されなければならないということです。
Redirectすればいいじゃん、と思い
うーん、ちゃんとスラッシュが末端であることを認識してくれればいいのになぁと思いながら、もしかしたら正規表現で行末であるところの$を使えばうまくいくかもなーと思い立ち、
結果は、ばっちり上手くいきました。
上手くいったものの、一回redirectが入るので少々無駄のある解決策ですよね。Webブラウザが要求したURIしか表示されないとしたら、やっぱり一回はWebブラウザに戻して、再度リクエストを投げてもらうしかないんでしょうかねぇ。
と、思ってadiaryのページを見たらrewriteを使う方法が推奨されているじゃないですか。しかも、同梱されているドキュメントにサンプルまで載っているじゃないですか。
でも動くよ。こりゃぁいい。
Apacheの.htaccessに仕掛けをするんだろうなー、と思っていて、これまではDirectoryIndexを使っていました。
DirectoryIndex adiary.cgiこれでスラッシュで終わってもちゃんとadiary.cgiを実行してくれます。でも、これだと次のページのリンクなどがうまく動いてくれません。
つまり、ブラウザのURIを表示するところにhttp://www.tokuda.net/diary/と表示するのではなくて、http://www.tokuda.net/diary/adiary.cgiと表示されなければならないということです。
Redirectすればいいじゃん、と思い
Redirect permanent / http://www.tokuda.net/diary/adiary.cgiとやってみました。すると、URIがループしてしまうらしく、ブラウザにはとんでもなく長いURIが表示されてしまいました。
うーん、ちゃんとスラッシュが末端であることを認識してくれればいいのになぁと思いながら、もしかしたら正規表現で行末であるところの$を使えばうまくいくかもなーと思い立ち、
RedirectMatch permanent /$ http://www.tokuda.net/diary/adiary.cgiと記述してみました。
結果は、ばっちり上手くいきました。
上手くいったものの、一回redirectが入るので少々無駄のある解決策ですよね。Webブラウザが要求したURIしか表示されないとしたら、やっぱり一回はWebブラウザに戻して、再度リクエストを投げてもらうしかないんでしょうかねぇ。
と、思ってadiaryのページを見たらrewriteを使う方法が推奨されているじゃないですか。しかも、同梱されているドキュメントにサンプルまで載っているじゃないですか。
RewriteEngine On RewriteBase /diary/ RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ adiary.cgi/$1 [L]うーむ、呪文だ。RewriteCondの所がちょっとよくわからんな。
でも動くよ。こりゃぁいい。