準備
apacheにrewriteモジュールを組み込む。
例:
% cd /path/to/apache/src % ./configure --enabele-module=rewrite --enabel-module=so % make;make install;make clean
apxsで組み込むなりお好きな様に。
UserDirectoryの設定
httpd.confに以下の記述を追加。
例(httpd.conf)
<IfModule mod_userdir.c>
UserDir /home/*/public_html
</IfModule>
~usernameでUserDirectoryにアクセスさせるのでなければ不要。
rewriteの設定
httpd.conf内の、(VirtualHost等の)対象領域の設定部分に以下の記述を加える。#mod_rewriteの説明を見る限り、ServerConfigとして全体に適用させる事が出来そうなのだが、どうも出来ない様だ。
例(httpd.conf)
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteLogLevel 0
RewriteLog logs/rewrite.log
RewriteMap non-tilde-user prg:/home/rewrite_script.pl
RewriteRule ^/([^~/]+)/(.*)$ ${non-tilde-user:$1|nobody}/$2
</IfModule>
RewriteMapのprg:以降は、リクエスト書換用スクリプトへのPath。
次に、rewriteのデータを得るためのスクリプトを用意する。(上の例だと/home/rewrite_script.plとして用意する。)
作成(/home/rewrite_script.pl)
権限を与える。#!/usr/bin/perl
&main;
sub main {
my $user_base = '/home/';
my $user_dir ='public_html/';
my %uid = ();
my $name = '';
$| = 1;
while (($name) = getpwent) {
$uid{$name} = 1;
}
while (<STDIN>) {
s/\n//g;
if ($uid{$_}) {
print "${user_base}$_/${user_dir}\n";
} else {
print "$_\n";
}
}
}
1;
% cd /path/to/rewrite_script/dir
% chmod 755 rewrite_script.pl