スクリプトは次のように私のURLにGETリクエストを作成します。
http://mydomain.com/cgi-bin/uu_ini_status_audios.pl?tmp_sid=b742be1d131c4d32237a9f1fcdca659e&rnd_id=0.2363453360320319
ただし、すぐに404が返されます。
The requested URL /cgi-bin/uu_ini_status_audios.pl was not found on this server.
しかし、そのスクリプトは私のサーバーに存在し、ファイルを見ることができます!正しい権限を持っています(確かに777にしました)。また、私のApacheユーザーとそのグループApacheが所有しています。
何が欠けていますか?
これについて何か助けてくれてありがとう!
Htaccess(書き換え)だろうと思っていましたが、もうそうではないと思います。 index.phpファイルをそこに入れて、URLからアクセスしようとしましたが、それもできません!私はこれを試しました:
http://mydoamin.com/cgi-bin/index.php
-同じ404エラー!これをmyerrorログで取得します。
[Tue Sep 14 14:42:49 2010] [error] [client xx.xxx.xx.xxx] script not found or unable to stat: /var/www/vhosts/mydomain.com/cgi-bin
Access_logファイル:
xx.xxx.xx.xxx--[14/Sep/2010:14:48:25 +0200] "GET /cgi-bin/index.php HTTP/1.1" 404 475 "-" "Mozilla/5.0(Windows; U、Windows NT 6.0、en-US、rv:1.9.2.9)Gecko/20100824 Firefox/3.6.9(.NET CLR 3.5.30729)」
私のhtaccessファイル:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^blog/ - [L]
RewriteCond %{HTTP_Host} ^www\.mydomain\.com$ [NC]
RewriteRule ^(.*)$ http://mydomain.com/$1 [R=301,L]
RewriteRule ^search/(.*)/(.*)/(.*)/(.*) /search.php?searchfor=$1&sortby=$2&page=$3&searchterm=$4
RewriteRule ^confirmemail/(.*) /confirmemail.php?code=$1
RewriteRule ^resetpassword/(.*) /resetpassword.php?code=$1
RewriteRule ^resendconfirmation/(.*) /resendconfirmation.php?userid=$1
RewriteRule ^categories/ /categories.php
RewriteRule ^([-_~*a-zA-Z0-9]+)(\/)?$ /memberprofile.php?username=$1
RewriteRule ^browse/audios/(.*)/(.*)/(.*)/(.*) /audios.php?sortby=$1&filter=$2&page=$3&title=$4
RewriteRule ^browse/categories/audios/(.*)/(.*)/(.*)/(.*) /categoryaudios.php?sortby=$1&filter=$2&page=$3&title=$4
RewriteRule ^audios/(.*)/(.*) /playaudio.php?audioid=$1&title=$2
RewriteRule ^download/audio/(.*)/(.*) /downloadaudio.php?AUDIOID=$1&title=$2
RewriteRule ^members/audios/(.*)/(.*) /memberaudios.php?pid=$1&username=$2
RewriteRule ^syndicate/audios/(.*)/(.*) /syndicateaudios.php?filter=$1&title=$2
</IfModule>
[root@smydomain ~]# ls -la /var/www/vhosts/mydoamin.com/httpdocs/cgi-bin/
total 60
drwxr-xr-x 3 Apache root 4096 Sep 14 14:37 .
drwxr-x--- 20 som psaserv 4096 Sep 14 14:40 ..
drwxr-xr-x 2 Apache root 4096 Sep 7 03:01 configs
-rwxrwxrwx 1 Apache root 4 Sep 14 14:37 index.php
-rwxrwxrwx 1 Apache apache 6520 Sep 7 03:01 uu_ini_status_audios.pl
-rwxr-xr-x 1 Apache root 3215 Sep 7 03:01 uu_lib_audios.pl
-rwxr-xr-x 1 Apache root 30249 Sep 7 03:01 uu_upload_audios.pl
SuExecが問題の原因でした。
これを無効にすると、cgi-bin内のスクリプトを実行できます。ただし、ディレクトリとスクリプトの権限が同じであることを確認する必要があります(例:0755)。さらに、ディレクトリとスクリプトは同じ人物が所有している必要があります。
これらは私のスクリプトを動作させるための要件でした!これが誰かの役に立つことを願っています。
あなたの投稿で、/var/www/vhosts/mydomain.com/cgi-bin
が見つからなかったと言っていました。 ls -la /var/www/vhosts/mydomain.com/cgi-bin
を実行するとどうなりますか?
また、cgi-bin
フォルダーをstatできないと言っていることにも気付きました。 mod_rewriteルールは/var/www/vhosts/mydomain.com/cgi-bin/index.php
から/var/www/vhosts/mydomain.com/cgi-bin
へのすべてのリクエストを誤って転送していますか?
詳細がわかれば質問を更新してください。
[〜#〜] edit [〜#〜]: mod_writeログを有効にする 以下を設定してください:
RewriteLog /path/to/where/logs/live
RewriteLogLevel 5
これにより、mod_rewrite
がリクエストに影響を与えているかどうかを確認するための十分なデータが得られます。
また、URLが404としてFirefoxに報告されるエラーも確認しました。同じURLをwget
に渡すと、500内部サーバーエラーが返され、ログファイルにエラーが表示されました。この問題を抱えている他の人は、wget
を試してみる価値があります。
私の場合、これはPHPスクリプトが存在しないディレクトリからスクリプトにファイルを含めようとした結果です。