00時00分00秒 [Web関連]
私が利用している「さくらインターネット」というレンタルサーバ会社では、mod_rewriteを使うことができます。料金が安いのに、なかなか便利なサーバです。
mod_rewriteというのは、Apacheのモジュールで、正規表現を使ってURLを書き換えるものです。
これを活用すると、CGIで動的に生成されたページを、あたかも静的なページであるかのように見せることもできます。
例えば、
http://www.example.com/bbs.cgi?page=3&mode=view&style=flat
…みたいな、どっから見ても動的に生成してるとしか思えないURLを
http://www.example.com/bbs/3/view/flat/
…みたいな、一見静的なページのURLなように見せることができたりします。
まあ、mod_rewriteの用途はそれだけじゃないでしょうけど、そんな用途にも使われます。(Amazon.co.jpも、そんな感じですよね。)
上記の変換をmod_rewriteで実現するには、.htaccessファイルに次のように書いておけば良さそうです。
…たったこれだけ。
1行目は、mod_rewriteを有効にするための記述で必須。
2行目は、実際にURLを書き換える正規表現。
2行目の最後の「 [L] 」というのは、そこでURLの変換を終了するという意味。この場合、3行目以降は存在しないので、書かなくても一緒だと思いますが。
mod_rewriteというモジュールも大変便利なんだけど、正規表現の威力もすごいですよね。Perlなんかで正規表現を使うたびに思うんですけど。正規表現を考えた人もすごいけど、これを実装した人もすごいと思います。(笑)
で、まあ、上記のように .htaccessファイルに書いておけば、URLの書き換えができるわけです。…のハズなんだけど…。
できませんでした…。orz
mod_rewrite解説サイトとか、いろんな人のブログとか見てても、上記の記述で良さそうだと思えるんですけど、なぜかうまくいきません…。
.htaccessファイルが読まれてないんじゃないか!?とか思ったりしたんですけど、他の記述 ErrorDocument とかを記述してみるとちゃんと反映されるので、.htaccessファイル自体は読まれてるんですよね。
じゃあ、なんでURLが書き換えられないのか!
…いろいろ試行錯誤した結果、どうも「書き換え後のURL」を、「 http:// 」から書けば、うまくいくようでした。
つまり、以下のような感じ。
これなら、うまくいきました。(↑ウインドウ幅によっては3行以上あるように見えるかも知れませんが、ソース的には『2行』です。)
なんで「http://」から書く必要があるのか、よく分かりませんが。
しかしまあ、この書き方ならうまくいったので、いいんですけど。
バーチャルホストだから、ダメだとか?(関係ないよねえ?^^;;;)
以下、参考にしたサイト群。
この日記へのコメントはお気軽に! コメント数:5件
とんぼさん、どうもです。
コメントありがとうございます。まだ解決はしてない…というか、まあhttpから書けばうまくいくので問題ないとして、放置しているのですが。(^^;;;
なんとなく、変換先は絶対URL(httpで始まる必要はないけど)でないとダメっぽいような気がします。
www.nurs.or.jp/~sug/homep/rewrite/rewrite15.htm
ここら辺↑を読むと、なんとなくそんな感じが。
投稿者 にしし : 2006年05月30日 23:01
2行目にRewriteCond %{REQUEST_FILENAME} !-f
を挿入されてみてはいかがでしょうか?
末尾の「!-f」で、「『REQUEST_FILENAME』(リクエストさ
れたファイル名)が存在しないならば」という意味で3行目の
内容が読み込まれる仕組みのようです。
自分はこれを挿入したら相対アドレスでも稼動いたしました。
投稿者 とど : 2006年09月03日 14:55
とどさん、どうもです。
おー。これは有用な情報をどうもでした!
試してみます!
投稿者 にしし : 2006年09月04日 02:24
なぜか、このページ『だけ』にロシア語のスパムが頻繁に届くので、このページのコメント機能をOFFにしました。
何か書きたいコメントがありましたら、他のmod_rewriteネタを扱っているエントリのコメント欄などをご活用下さい。(^_^;;;
→ www.nishishi.com/blog/2006/01/dynamic_to_stat.html
とかがあります。
投稿者 にしし : 2008年11月30日 11:52
コメント数: 5件
>なんでURLが書き換えられないのか
RewriteBaseはいかがでしょう?
もし解決済みでしたらごめんなさい(汗
投稿者 とんぼ : 2006年05月29日 09:23