2005年2月10日(木)

wiki 静的ミラー

某 go.jp が、セキュリティポリシーを厳しくしたとかで、うちの intra で立ち上げてた wiki に、 VPN 経由ですらアクセスできなくなったんだが俺はどうしたらいいね?とか相談される。

正しいソリューションは、俺が DMZ にwiki 用のサーバを立てることだが、立場的にいまいちそそらない。むしろ職場の web space 上にアカウントがあって、今までまったく使っていなかったのを思い出したので、ここに静的なミラーを置いてやれと考える。

で、はまったはまった。

とりあえず wget で一切拾えば、 php+apache で wiki が html にはなるんだが、ダウンロードしたファイル名が .php?foo のままで、これをサーバにもってっただけじゃ html と見なされない。サーバ的に.htaccess での AddType も許さない。
しょうがないのでファイル名を .html に書き換えて、 href の先も置換してやる。 ? より後ろは web server がファイル名から切り離してしまうのでそこまで置換。例によって sed でがんばる俺。おおっと、最長一致か。
よく判らんが、 wiki 的にクエリに日本語が入るような url を wget で拾おうとして、何故かファイルに書き出すところでこけてるのを発見 @MacOSX。理解できなかったが、 FreeBSD 上では成功していたので実行環境を移して回避。
で、最後に、 url encode されたリクエストは web server が decode してからファイルとして扱うというところで諦めて、外部コマンドで decode することにした。 ports/net/urlendec というのを発見。何故かnasm に build depend してるところが頼もしい。
wiki name にスラッシュが含まれているときの対処。最初ディレクトリ掘ったれと思っていたがこれじゃどうもうまくいかないので、最後はもう s/%2F/_/g とかやって逃げ。

いやー、しんどかった。力技って、こっちの力も消耗するな。

それにしても某 go.jp の事務め。無駄に仕事増やすとか仕事の邪魔しかしないとかは聞いていたが、まさか他機関の俺の仕事まで増やしやがるとは……。削るのは自分とこの高給取りだけにしやがれ。

#! /bin/sh

CONV0='s/%2F/_/g'
CONV1='s/pukiwiki.php?\([^"]*\)"/\1.html"/g'
CONV2='s/html?\([^"]*\)"/\1.html"/g'

for i in *.html?* index.html;
do
    x=../puki2/`echo $i|sed -e 's/html?\(.*\)/\1.html/' -e $CONV0 |urldecode`
    sed -e $CONV0 -e $CONV1 -e $CONV2 "$i" > "$x"
done

for i in *.php?*;
do
    x=../puki2/`echo $i|sed -e 's/pukiwiki.php?\(.*\)/\1.html/' -e $CONV0 |urldecode`
    sed -e $CONV0 -e $CONV1 -e $CONV2 "$i" > "$x"
done

exit 0

[referer: [an error occurred while processing this directive]]

あわせて読みたい