ディレクトリをまたぐmod_rewrite
通常の設定方法
adiary では mod_rewrite を利用して設置することを推奨しています。例えば、
CGI設置場所 : http://xx.yy.zz/~user/adiary/adiary.cgi 見せたいURL : http://xx.yy.zz/~user/adiary/
であるとき、.htaccess を http://xx.yy.zz/~user/adiary/ に設置して
RewriteEngine On RewriteBase /~user/adiary/ RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ adiary.cgi/$1 [L]
とすることで、実現出来ます。最近の記事などはキャッシュされていますので、リンクを書き換えるため、日記帳の設定を開いて特に変更せず保存してください。
さてではCGI設置場所を変更しないで http://xx.yy.zz/~user/ で見せるにはどうしたら良いでしょうか?
ディレクトリをまたがる mod_rewrite
CGI設置場所 : http://xx.yy.zz/~user/adiary/adiary.cgi 見せたいURL : http://xx.yy.zz/~user/
.htaccess を http://xx.yy.zz/~user/ に設置して
RewriteEngine On RewriteBase /~user/ RewriteRule ^adiary/ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ adiary/$1 RewriteRule ^adiary/[\w\.]*\.cgi - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^adiary/(.*)$ adiary/adiary.cgi/$1 [L]
と書きます。http://xx.yy.zz/~user/adiary/ にある .htaccess(のmod_rewrite設定)は無効化します。
このとき<$Basepath>は設定しないか、設定するならば<$Basepath="/user/">とします。
Apache 1.3.xxの場合
Apache1.3では上の方法はうまくいかないようです。それぞれ次のように設定すれば大丈夫でした。
/~user/.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^adiary/ - [L]
RewriteRule ^(.*)$ adiary/$1
/~user/adiary/.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ adiary.cgi/$1
adiary.conf.cgi にある設定項目の補足
adiary.conf.cgi にあるディレクトリ設定
# 公開のデータディレクトリ <$constant(public_dir) = 'public/'> <$constant(theme_dir) = 'theme/'>
を変更する際、adiary.cgi から見たデータの保管場所として指定する必要があります。というのも www 上から見せる URL のパスであるのと同時に、adiary が実体ファイルにアクセスする際のパスにもなっているためです。