脚本向我的 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 脚本中的结果。