桜鯖で ~XXX 階層下の CGI/PHP が動作しない

Posted by
ぴろり
Posted at
2005/05/24 11:41
Trackbacks
関連記事 (0)
Post Comment
コメントできます
Category
電算室 カテゴリ
 このサイトは  さくらインターネットのレンタルサーバ に独自ドメインで運営しています。 ここで今まで問題なく動作していた CGI と PHP スクリプトがあるのですが、 格納しているディレクトリ名を変更したところ動作しなくなるという不具合がありました。 具体的にはディレクトリ名を ~XXX の形式の名前に変更すると、 どんなスクリプトでも Internal Server Error となってしまうというものです。
このエントリーをはてなブックマークに追加  

結局 ~XXX のディレクトリ名でのアクセスは mod_rewrite を使って
http://www.myname.com/~XXX/...
/home/myname/www/user/XXX/...
にリダイレクトすることで対応することにしました。 URL のディレクトリ構成とドキュメントルート以下のそれを 可能であれば同じにしたかったのですが、 シェルのエイリアス(後述)が何かキモチワルイので諦めることにしました。

設置した .htaccess の内容は次の通りです。

RewriteEngine On
RewriteRule ^~([^/]+)/?(.*) /user/$1/$2

今のところ ~XXX で示される URL 以下でも CGI・PHPともに動作しているようです。 一応、目指すところには落ち着いたっぽいので、目出度く解決ということで m(_ _)m


'05/04/24 現象

【手順1】
 先ず以下のようなスクリプトを作成し、以下のディレクトリ構成で パーミッションを設定した上で CGI と PHP で動作を確認します。

#!/usr/bin/perl
print "Content-type: text/html

Hello, World.
";
<?php echo "Hello, World
"; ?>
/home/myname/www/test/test.html … OK
/home/myname/www/test/test.cgi … OK 正常動作
/home/myname/www/test/test.php … OK 正常動作
/home/myname/www/test/cgi-bin/test.cgi … OK 正常動作
/home/myname/www/test/cgi-bin/test.php … OK 正常動作

【手順2】
 次に"test"ディレクトリの名前を"~test"に変更します。他の操作は一切しません。

/home/myname/www/~test/test.html … OK
/home/myname/www/~test/test.cgi … Internal Server Error
/home/myname/www/~test/test.php … Internal Server Error
/home/myname/www/~test/cgi-bin/test.cgi … Internal Server Error
/home/myname/www/~test/cgi-bin/test.php … Internal Server Error

 このように単に"Hello, World"と出力するだけのスクリプトが動作しなくなります。

 サーバの仕様 にある CGI の仕様を見る限りでは、特に .htaccess を記述せずとも 任意のディレクトリでスクリプト動作ができるとあります。 また ~XXX 形式のディレクトリでの制限については特に書かれていません。
 確かに ~XXX のディレクトリ名は一般的な Web サーバでは ユーザのホームディレクトリとして扱われることがある特殊エイリアスですが、 レンタルサーバーの共通設定で何らかの設定が既にされている影響かもしれません。

'05/05/24 補追 1

 サーバに telnet ログインを行い、CWD が /home/myname/www の時に
cd ~test
とコマンドタイプすると
Unknown user: test
と怒られてしまいました。
cd ./~test
だと動作します。 今までは Windows の FTP クライアントアプリでディレクトリ操作を行っていたため この現象に気が付きませんでしたが、 シェル上では各ユーザのホームディレクトリとして解釈されているようです。
 相変わらず真相は謎のままですが、もしかするとこれと関係あるのかもしれません…

'05/05/24 補追 2

 今回、mod_rewrite で対応するため .htaccess を作成しましたが、 さくらのレンタルサーバでは少し挙動が違うようでした。 例えば、次の指示は動作しません。
# 気が付くのに 1 時間無駄に orz
RewriteRule ^/from.html$ /to.html
http://myname.com/from.html にアクセスがあると 自動的に to.html に飛ばせたいのですが、条件にマッチしてくれません。 今回参考にしたガイド文書 でも同じように書いてありますし、Internal Server Error も出ていません。
 さくらのレンタルサーバでは、どうやらこれを
RewriteRule ^from.html$ /to.html
と書かないとダメらしく、 桜鯖では mon_rewrite にはファイルパス先頭の / が付いてこないようです。

参考リンク

このエントリーをはてなブックマークに追加  



関連記事/トラックバック

関連記事/トラックバックはまだありません

この記事にトラックバックを送るには?

コメントを投稿する

 
 (必須, 匿名可, 公開, トリップが使えます)
 (必須, 匿名可, 非公開, Gravatar に対応しています)
 (必須)
スパム コメント防止のため「投稿確認」欄に ランダムな数字 CAPTCHAについて を入力してから送信してください。お手数ですがご協力のほど宜しくお願いいたします。