Вопрос: 404 Ошибка в файле, который существует?


Сценарий делает запрос GET на мой URL-адрес следующим образом:

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! Я получаю это в журнале ошибок:

[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; с.в.: 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
2017-09-14 12:34


Источник


Вы отметили это с помощью mod-rewrite, есть ли правило перезаписи? Работают ли какие-либо скрипты perl? Вы пытались запустить его из командной строки? - Chris S
Кроме того, добавьте соответствующие журналы из своего access_log а также error_log, - Andrew M.
Это длинный снимок, потому что я не знаком с Apache, но вы определили тип MIME и обработчик для расширения .pl? Поскольку в IIS, если для файла не указан обработчик и тип mime, он будет сообщать об этом как 404. - Stephane
Это просто интерпретирует, как браузер обрабатывал файл; Apache немного мягче, чем IIS. :) - Andrew M.


Ответы:


SuExec вызывал проблему для меня.

Отключение этого означает, что мои скрипты в cgi-bin могут работать. Но вы должны убедиться, что каталог и сценарии имеют одинаковые разрешения, то есть 0755. Кроме того, каталог и сценарии должны принадлежать одному и тому же человеку.

Это были требования, чтобы заставить мои скрипты работать! Я надеюсь, что это помогает кому-то.


3
2017-09-15 13:11



Чувак, ты спасатель. У меня была проблема, которая сводила меня с ума на prod-сервере, и это было решение, Спасибо! - cale_b


В своем посте вы сказали, что не можете найти /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 влияет на ваш запрос.


1
2017-09-14 12:48



Я добавил обновление 3, чтобы показать результат ls -laкоманда. - Abs
Btw, когда я попытался добавить уровень перезаписи - я получил ошибку («Неверная команда« RewriteLevel », возможно, с ошибкой или определена модулем, не включенным в конфигурацию сервера») после перезапуска сервера Apache, который он не распознал , Также ничего не добавляется в этот журнал - не предлагает никаких ошибок? - Abs
Ах, RewriteLogLevel, - Abs
Я не вижу ошибок в переписываниях, они, кажется, идут в нужное место, и фактический файл pl, который я пытаюсь получить, не упоминается в этом журнале, поэтому я думаю, что это не проблема с перенаправлением? - Abs


Я также видел ошибки, когда URL был указан как 404 для Firefox. Передача того же URL-адреса wget вернул 500 Internal Server Error и обнаружил ошибки в файле журнала. Может стоить попробовать с wget для тех, у кого есть эта проблема.

В моем случае это было связано с попыткой включить файл в скрипт PHP из каталога, которого не было.


0
2017-08-06 18:14