http://www.myname.com/~XXX/...を
/home/myname/www/user/XXX/...にリダイレクトすることで対応することにしました。 URL のディレクトリ構成とドキュメントルート以下のそれを 可能であれば同じにしたかったのですが、 シェルのエイリアス(後述)が何かキモチワルイので諦めることにしました。
設置した .htaccess の内容は次の通りです。
RewriteEngine On RewriteRule ^~([^/]+)/?(.*) /user/$1/$2
今のところ ~XXX で示される URL 以下でも CGI・PHPともに動作しているようです。 一応、目指すところには落ち着いたっぽいので、目出度く解決ということで m(_ _)m
【手順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 サーバでは
ユーザのホームディレクトリとして扱われることがある特殊エイリアスですが、
レンタルサーバーの共通設定で何らかの設定が既にされている影響かもしれません。
cd ~testとコマンドタイプすると
Unknown user: testと怒られてしまいました。
cd ./~testだと動作します。 今までは Windows の FTP クライアントアプリでディレクトリ操作を行っていたため この現象に気が付きませんでしたが、 シェル上では各ユーザのホームディレクトリとして解釈されているようです。
RewriteRule ^/from.html$ /to.htmlhttp://myname.com/from.html にアクセスがあると 自動的に to.html に飛ばせたいのですが、条件にマッチしてくれません。 今回参考にしたガイド文書 でも同じように書いてありますし、Internal Server Error も出ていません。
RewriteRule ^from.html$ /to.htmlと書かないとダメらしく、 桜鯖では mon_rewrite にはファイルパス先頭の / が付いてこないようです。