小規模Webサイト向け CMS 「すぐ使えるCGI」のサポート情報

ファイルは書き出せますがブラウザで表示できません ( 500 Internal Server Error)

最終更新日: 2012-08-24

現象

「すぐ使えるCGI」の管理画面の操作は期待通りでFTPソフトなどで確認するとサーバ上にはファイルが書き出されているのに、管理画面の「チェック」のリンクから書き出されたファイルを表示しようとすると「500 Internal Server Error」となる。

類似の現象

  • 「403 Forbidden / 許可されていません」が出る場合はこちらを参照して下さい。
  • 「404 Not Found / 見つかりません」が出る場合はこちらを参照して下さい。
  • 管理画面(admin.cgi)にアクセスしたときにこのエラーが出る場合はこちらを参照して下さい。

考えられる原因

CGI 専用ディレクトリの配下にファイルを書き出しているのが原因です。

詳細情報

「cgi-bin」や「cgi」等の名前で予めサーバにCGI用のディレクトリがある場合、そのディレクトリ配下にあるファイルは「全てプログラムである」という前提で動作するサーバがあります。

このようなタイプのサーバに、デフォルトのディレクトリ構成で設置を行ってしまうと、
 ・書き出されたHTMLファイル
 ・添付ファイル、添付画像
 ・編集中の記事の添付ファイル、添付画像
がブラウザで表示できません。

対応方法

書き出しディレクトリ( webdir/ )と一時ファイル保存用ディレクトリ( tempfiles/ )を、CGI専用ディレクトリから通常のウェブコンテンツディレクトリ配下に変更します。
以下の方法を参考に変更を行って下さい。

なお、一時ファイル保存用ディレクトリ( tempfiles/ )は、製品によっては無い場合もあります。

1. 登録記事を削除する

テスト用等の記事が既に登録されている場合、管理画面から操作して削除して下さい。

2. ウェブコンテンツディレクトリ内に書き出しディレクトリを作成する

ウェブサイトの通常のコンテンツディレクトリ(※)内に、FTPソフトなどで書き出し用ディレクトリを作成して下さい。

※ トップページなど、通常のHTMLファイルなどを保存してあるディレクトリの事です。

製品に含まれていた以下のディレクトリに代わるものとなります。

webdir/  記事ファイル等書き出しディレクトリ
tempfiles/ 一時ファイル保存用ディレクトリ


ディレクトリ構成例

変更前の構成(=エラーの出ている状態))

/                          ルートディレクトリ
 |-- cgi-bin/              CGI専用ディレクトリ
 |    |
 |    |-- sugu/           「すぐ使えるCGI」設置ディレクトリ
 |         |-- admin/
 |         |-- data/
 |         |-- templates/  
 |         |-- tempfiles/  ←これを移動する予定
 |         |-- webdir/     ←これを移動する予定
 |
 |
 |-- htdocs/               コンテンツディレクトリ
      |
      |-- index.html       (元からあったファイル、ディレクトリ)
      |-- :


新しい構成例)

/                          ルートディレクトリ
 |-- cgi-bin/              CGI専用ディレクトリ
 |    |
 |    |-- sugu/           「すぐ使えるCGI」設置ディレクトリ
 |         |-- admin/
 |         |-- data/
 |         |-- templates/
 |         |-- tempfiles/
 |         |-- webdir/
 |
 |
 |-- htdocs/               ウェブサイト用コンテンツディレクトリ
      |
      |-- sugu_webdir/    「すぐ使えるCGI」書き出しディレクトリ
      |                    (新たに作成)
      |
      |-- sugu_tempfiles/ 「すぐ使えるCGI」一時ファイル用ディレクトリ
      |                    (新たに作成)
      |
      |-- index.html       (元からあったファイル、ディレクトリ)
      |-- :


3. 書き出しディレクトリにパーミッション設定

2で作成した書き出しディレクトリに、CGI実行ユーザでのパーミッションを設定して下さい。
移動前のディレクトリと同じように設定すればOKです。

4. CGI内のディレクトリ設定を変更

admin.cgi 内の書き出しディレクトリ設定を、2、3 で設定したディレクトリに変更して下さい。

変更対象の環境変数設定は以下の部分です。
※ 製品によっては、最初の2つの変数($conf{file_dir} と $conf{relative_file_dir} )はありません。

変更対象部分 [変更前] )

#--------------------------------------------------------[line 095]--
# 添付ファイル一時保存ディレクトリ
#--------------------------------------------------------------------
# アーカイブに含まれていた tempfiles/ ディレクトリへのパスを指定
# します。
# このディレクトリには、Webサーバ経由でアクセスできる必要があります。
# 相対パスでも絶対パスでも指定できます。
# Windowsで稼動させる場合、絶対パスでないとアクセスできない場合があり
# ます。
# 変更した時は $conf{relative_file_dir} の設定も必ず見直して下さい。 
 
$conf{file_dir} = '../tempfiles/'; 
 
 
 
#--------------------------------------------------------[line 110]--
# ($conf{file_dir} を変更したら同時に変更)
#--------------------------------------------------------------------
# admin/admin.cgi から一時保存ディレクトリ( $conf{file_dir} )への
# URL 上のパスを指定します。
# 相対パスか、ウェブサーバのトップ階層からの絶対パスで指定します。 
 
$conf{relative_file_dir} = '../tempfiles/'; 
 
 
 
#--------------------------------------------------------[line 125]--
# ファイル書き出しウェブディレクトリ
#--------------------------------------------------------------------
# このディレクトリは、通常 Web コンテンツが格納されているディレクトリ
# のどこかになります。
# 相対パスでも絶対パスでも指定できます。
# Windowsで稼動させる場合、絶対パスでないとアクセスできない場合があり
# ます。
# 変更した時は $conf{relative_web_dir} の設定も必ず見直して下さい。 
 
$conf{web_dir} = '../webdir/'; 
 
 
#--------------------------------------------------------[line 140]--
# ($conf{web_dir} を変更したら同時に変更)
#--------------------------------------------------------------------
# admin/admin.cgi からファイル書き出しウェブディレクトリ
# ( $conf{web_dir} )へのURL 上のパスを指定します。
# 相対パスか、ウェブサーバのトップ階層からの絶対パスで指定します。 
 
$conf{relative_web_dir} = '../webdir/';

変更例

上記 2 の例の場合の変更例を示します。
ご利用中のサーバ環境に合わせて設定して下さい。

編集例)

#--------------------------------------------------------[line 095]--
# 添付ファイル一時保存ディレクトリ
#--------------------------------------------------------------------
# アーカイブに含まれていた tempfiles/ ディレクトリへのパスを指定
# します。
# このディレクトリには、Webサーバ経由でアクセスできる必要があります。
# 相対パスでも絶対パスでも指定できます。
# Windowsで稼動させる場合、絶対パスでないとアクセスできない場合があり
# ます。
# 変更した時は $conf{relative_file_dir} の設定も必ず見直して下さい。 
 
$conf{file_dir} = '../../../htdocs/sugu_tempfiles/'; 
 
 
 
#--------------------------------------------------------[line 110]--
# ($conf{file_dir} を変更したら同時に変更)
#--------------------------------------------------------------------
# admin/admin.cgi から一時保存ディレクトリ( $conf{file_dir} )への
# URL 上のパスを指定します。
# 相対パスか、ウェブサーバのトップ階層からの絶対パスで指定します。 
 
$conf{relative_file_dir} = '/sugu_tempfiles/'; 
 
 
 
#--------------------------------------------------------[line 125]--
# ファイル書き出しウェブディレクトリ
#--------------------------------------------------------------------
# このディレクトリは、通常 Web コンテンツが格納されているディレクトリ
# のどこかになります。
# 相対パスでも絶対パスでも指定できます。
# Windowsで稼動させる場合、絶対パスでないとアクセスできない場合があり
# ます。
# 変更した時は $conf{relative_web_dir} の設定も必ず見直して下さい。 
 
$conf{web_dir} = '../../../htdocs/sugu_webdir/'; 
 
 
#--------------------------------------------------------[line 140]--
# ($conf{web_dir} を変更したら同時に変更)
#--------------------------------------------------------------------
# admin/admin.cgi からファイル書き出しウェブディレクトリ
# ( $conf{web_dir} )へのURL 上のパスを指定します。
# 相対パスか、ウェブサーバのトップ階層からの絶対パスで指定します。 
 
$conf{relative_web_dir} = '/sugu_webdir/';

5. アップロードと確認

変更した admin/admin.cgi を元のファイルと同じ場所に上書きアップロードすれば設定変更は完了です。
管理画面からの操作と書き出されたファイルの表示を確認して下さい。

移動前のディレクトリ( webdir/ と tempfiles/ )は削除して下さい。

関連リンク

さらに詳しく