Я создал следующий псевдоним в httpd.conf:
alias /aliasedfolder /some/location/on/the/server/folder
<Location /aliasedfolder>
AddHandler cgi-script .pl
Options +FollowSymLinks +ExecCGI
Order allow,deny
Allow from all
AllowOverride None
</Location>
Проблема в том, что я могу просматривать изображения в «aliasedfolder», но получаю сообщение об ошибке «файл не существует», когда я запускаю там сценарий Perl, например /aliasedfolder/script.pl.
Физический сценарий Perl находится в папке "/ some / location / on / the / server /".
Я убедился, что у скрипта есть разрешение 755.
Ниже приводится содержимое сценария perl:
#!/usr/bin/perl
use CGI qw/:standard/;
print "Content-type:text/html;\n\n";
print "Hello world";
1;
В чем проблема?
После проверки права собственности на / some / location / на / в / server / папке я обнаружил, что владельцем является «корневое» имя пользователя, в то время как я пытался получить доступ к папке через учетную запись (имя домена) на Apache, которая имеет другое имя пользователя, например domain.com/aliasedfolder/script.pl
Механизм suexec предотвращает это из соображений безопасности. Итак, я изменил владельца папки / some / location / on / the / server / и файла script.pl внутри нее с «root» на имя пользователя и группу моей учетной записи, и теперь он работает.
Это предотвратит доступ других доменов, указывающих на мой сервер, к этому файлу (script.pl), поскольку suexec предотвращает совместное использование одного файла несколькими доменами (с разными именами пользователей).
Я могу полностью отключить механизм suexec, но мне посоветовали не делать этого из соображений безопасности.
Спасибо всем, кто пытался помочь.
Вы пробовали использовать
<Directory "/some/location/on/the/server/folder" >
AddHandler cgi-script .pl
....
AllowOverride None
</Directory>
Также вы принимаете какие-либо меры безопасности, такие как suExec или SELinux, если у вас есть дополнительные права собственности и настройки расширенных атрибутов, необходимые для ваших скриптов.