404 文件存在则出错?

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

答案1

SuExec 给我带来了问题。

禁用此功能意味着我的 cgi-bin 中的脚本可以运行。但您必须确保目录和脚本具有相同的权限,即 0755。此外,目录和脚本必须由同一个人拥有。

这些是使我的脚本正常运行的要求!希望这对某些人有帮助。

答案2

在您的帖子中,您说找不到/var/www/vhosts/mydomain.com/cgi-bin;运行时会发生什么ls -la /var/www/vhosts/mydomain.com/cgi-bin

另外,我注意到它说无法统计cgi-bin 文件夹;您的 mod_rewrite 规则是否错误地将所有请求从/var/www/vhosts/mydomain.com/cgi-bin/index.php转发到/var/www/vhosts/mydomain.com/cgi-bin

如果您发现更多信息,请更新您的问题。

编辑启用 mod_write 日志通过设置以下内容:

RewriteLog /path/to/where/logs/live
RewriteLogLevel 5

这应该会为您提供足够的数据,以查看是否mod_rewrite影响您的请求。

答案3

我还看到过这样的错误:某个 URL 被报告给 Firefox,错误代码为 404。将相同的 URL 传递给 Firefox 会wget返回 500 内部服务器错误,并在日志文件中显示错误。对于遇到此问题的其他用户来说,可能值得一试wget

就我而言,这是尝试将不存在的目录中的文件包含到 PHP 脚本中的结果。

相关内容