web-dev-qa-db-ja.com

存在するファイルでの404エラー?

スクリプトは次のように私の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)」

アップデート2

私の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>

アップデート3

[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
5
Abs

SuExecが問題の原因でした。

これを無効にすると、cgi-bin内のスクリプトを実行できます。ただし、ディレクトリとスクリプトの権限が同じであることを確認する必要があります(例:0755)。さらに、ディレクトリとスクリプトは同じ人物が所有している必要があります。

これらは私のスクリプトを動作させるための要件でした!これが誰かの役に立つことを願っています。

3
Abs

あなたの投稿で、/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がリクエストに影響を与えているかどうかを確認するための十分なデータが得られます。

1
Andrew M.

また、URLが404としてFirefoxに報告されるエラーも確認しました。同じURLをwgetに渡すと、500内部サーバーエラーが返され、ログファイルにエラーが表示されました。この問題を抱えている他の人は、wgetを試してみる価値があります。

私の場合、これはPHPスクリプトが存在しないディレクトリからスクリプトにファイルを含めようとした結果です。

0
Brad Mace