cgi-bin/ 配下にある *.html が表示できない、または CGI 専用サーバ上にある *.html が表示できないなどの設定がなされているプロバイダで起こる現象です。ver.7.00 以降の「じょじょBBS」や「じょじょゲスト」などは、メインとなる一覧ページを index.html の名称で通常の HTML ファイルとして出力するため、CGI と HTML のリクエストを分離させた環境では正常に動きません。はっきり言ってしまうと、そのようなプロバイダでの使用は推奨しません。
ただし、大きな利点が損なわれますが、以下のような方法で回避することが可能です。
#!/usr/local/bin/perl # HTTPヘッダの出力 print "Status: 200 OK\n"; print "Content-Type: text/html; charset=$Charset\n"; print "Content-Style-Type: text/css\n"; print "Content-Script-Type: text/javascript\n"; print "Content-Language: ja\n\n"; # index.htmlの表示 open(HTML, "index.html"); print $_ while (<HTML>); close(HTML); # 終了 exit(0); __END__
jscm.pl の更新履歴の下にある $difftime に時差を時間単位で設定します(通常は正の値です)。
*.cgi 中のすべての &jwlib'makeDate("yyyy/mm/dd(w) hh:nn"); を &jwlib'makeDate("yyyy/mm/dd(w) hh:nn", 時差); に変更します。
jscm.pl ver.1.01 以降の、ソース中の更新履歴の下に専用の設定項目があるので、参照してください。
.htaccess が使えるサーバの場合、log/ 配下のファイルをアクセス禁止に設定することによって対処可能です。log/ 配下に以下の内容の .htaccess というファイルを転送してください。ピリオドで始まるファイル名が作れない場合、サーバに転送してから名前を変えます。
<Limit GET POST> order allow,deny deny from all </Limit>
または、ログファイルやデータファイルをCGIと見なすように設定し、500エラー(Internal Server Error)にしてしまうという方法もあります。この場合、一番上(通常は public_html/ の上の階層)にある .htaccess に以下の記述を追加するだけで実現可能です。
AddType application/x-httpd-cgi .cgi .log .dat
tok2 や infoseek など、Location ヘッダが使えない一部のレンタルサーバでこの問題が発生します。
jscm.plの
sub outLocation { my ($url) = @_; print "Status: 302 Found\n"; print "Location: $url\n"; print "\n"; exit(0); }
という箇所を以下のように書き換えてください。
sub outLocation { my ($url) = @_; print "Content-Type: text/html\n\n"; print "<html><head>\n"; print "<meta http-equiv=\"refresh\" content=\"0;url=$url\">\n"; print "</head></html>\n"; exit(0); }
tsukaeru.net などでこの問題が発生します。
jscm.plの
sub outStdHeader { my ($charset, $file) = @_; print "Status: 200 OK\n"; print "Content-Type: text/html; charset=$charset\n"; print "Content-Style-Type: text/css\n"; print "Content-Script-Type: text/javascript\n"; print "Content-Language: ja\n"; if ($file) { print "Last-Modified: " . getLastModified($file) . "\n"; } print "\n"; }
という箇所を以下のように書き換えてください。
sub outStdHeader { my ($charset, $file) = @_; print "Content-Type: text/html; charset=$charset\n\n"; }Presented by じょじょ♪ <webmaster@starwars.jp> (http://www.starwars.jp/web/)