ディレクトリをまたぐ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 が実体ファイルにアクセスする際のパスにもなっているためです。