日記帳だ! with Tux on Libserver

二度目の大改造!! 日記帳…か?を継承し、より柔軟でパワフルなBlogに変身しました。

RSSに対応しています。リンク・コメント・トラックバックは自由にしていただいてほぼ問題ありません。
RSS購読方法、僕のリンク・コメント・トラックバックについての考えを読むことをおすすめします。

<< 過去

未来 >>

よく切れるナイフmod_rewriteは大切なURLを守る

メールによる投稿試験をしたけど当然成功しましたね。
まぁ目的なんてモバイルからの投稿以外にはないですけど。
ただ旅行で、インターネットにつなげる保証があるようなないようななので念のために。
まぁあるはずなんですけど、せっかくいい仕組みがあるので試しておきたかったの。
それでrss.phpの欠陥を発見したので、index.php?mode=rssに置換することにしました。
index.phpの一部をrss.phpとして抜き出してたのだが、まぁメール投稿周辺でバグがあったので。
けど、RSS購読している人は何もしなくてOKです。これから登録する人もrss.phpで登録すればOKです。
httpd.confにこんなのを追加しました。
<Directory /var/www/html/fdiary>
RewriteEngine On
RewriteBase /fdiary
RewriteRule ^rss.php.*$ /fdiary/?mode=rss [L]
</Directory>
こういうのがあるんですね。mod_rewriteの機能なんですけど、正規表現で置換できるんです。
Perl式に書けば、$req =~ s|^rss.php.*$|/fdiary/?mode=rss|;みたいな感じです。$1とかでグループ化したのを使えるし。
なぜかDirectoryディレクティブについて書くんですよね。ついでにRewriteBaseもちゃんと設定してね。
これは非常に高度な機能でして、/foo/bar/hogeというのを、/foo.php?id=bar&opt=hogeとかに置換できるぐらいすごいです。
libserverではあんまりrewriteは使わないけど、部の方ではすごい多用してます。
目的は2つあって、1つは昔使ってたIPアドレス表記について移転通知するため、
もう1つはHTTPS強制のため。まぁどっちも結構高度な内容です。
まずIPアドレス表記の移転通知について。なんで移転通知なのかというと検索エンジンのロボットさんに言うため。
<VirtualHost 10.20.30.40>
ServerName 10.20.30.40
RewriteEngine on
RewriteRule ^(.*)$ http://www.example.com$1 [L,R=301]
</VirtualHost>
VirtualHostディレクティブというのはなんぞやというのがあるかもしれん。
僕もよく理解してないので整理してみた。
VirtualHostディレクティブの使い道は2つある、
1つは複数のIPアドレスを受けるApacheで、受け取ったIPアドレスによって違う動作をするとき。
10.20.30.40と10.20.30.41の2つのIPアドレスから受けるApacheはそのままでは2つ同じ動作。
<VirtualHost 10.20.30.40>~</VirtualHost>と<VirtualHost 10.20.30.41>~</VirtualHost>の2つを用意して、
その中に違う点をそれぞれに書けば、それぞれで違う動作をしますよと。
試しに127.0.0.1を使って実験してみたが、うまくいった。
ポート番号もIPアドレスとくっつけて書くみたい。10.20.30.40:80と10.20.30.40:8080で動作が違うとかもこれで書ける。
もう1つはIPアドレスは違わないけどServerName、ドメイン名が違うとき。
今回はそれで、やってるけど、実は上のだけでは動かん。
NameVirtualHost 10.20.30.40
<VirtualHost 10.20.30.40>
ServerName www.example.com
DocumentRoot "/var/www/html"
</VirtualHost>
<VirtualHost 10.20.30.40>
ServerName foo.example.com
DocumentRoot "/var/www/foohtml"
</VirtualHost>
まぁこういうこともできますよと。2つもサーバーないのに2つあるように見せかけるということです。
で、これでIPアドレスのServerNameと、使ってるドメイン名のServerNameの2つのVirtualHostディレクティブがあると。
そのIPアドレスの方にこれが書いてあります。
もう1つはHTTPSに強制移動させるとき。
<Directory /var/www/mail/source>
RewriteEngine On
RewriteBase /mail
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://www.example.com/mail/$1 [L,R]
</Directory>
まぁあんまり難しくはないように見えます。
RewriteCondは条件で、これに当てはまったら次のRewriteRuleを実行するの意味。
%{HTTPS}を発見するのに苦労した覚えがある。
こちらもリダイレクトだけど、R=301になってないよ。302だから一時移転という意味。
とまぁいろいろやってます。
このmod_rewriteはいろんなことができます。
もし自分でmod_rewriteが扱えるのならぜひ有益に使っていただきないなと。
.htaccessで使えるところもあるかもしれんし。
まぁ正規表現使ってるので重いと評判ですが…まぁ普通は気にすることないでしょう。
で、どんなときに有益に使って欲しいかというと、URLが変わってしまうときですね。
今回のrss.phpのはまさにそのよい例ですね。
もっと複雑な置換もできますからね。
あと、移転通知するためにR=301とするのもいいと思います。
けど永遠に同じURLでアクセスできるようにしましょうというのは大切な事です。
ここのシステムの入れ替えの時、/fdiary/read.php/1116589099とか永遠にアクセスできるように、
BlognPlusのPHPばっかりのfdiaryディレクトリにぽつんとread.phpってのがあります。
read.phpの中身はかなり書き換えられたけど、それで今までと変わらずアクセスできるようにしています。
いや、Googleからくるユーザー多いし、急に変えちゃまずいよなと思ってがんばったというのもあるのだけどね。
形はどうあれこれは忘れないようにしましょうということです。
Author : Hidemaro
Date : 2008/10/05(Sun) 17:41
コンピュータ・インターネット | Comment | trackback (0)
blog comments powered by Disqus

トラックバック

トラックバックURL取得

Tools