У меня такой URL:
http: // IP-адрес / проект / cgi / sessionlogin.cgi? login = usernmae и пароль = somepass
но когда я открываю этот URL, я вижу действие загрузки файла cgi, а не результаты. У меня есть .htaccess в папке со сценариями cgi (/ var / www / html / project / cgi) с этой информацией:
AllowOverride None
Options +Indexes +ExecCGI +MultiViews +SymLinksIfOwnerMatch
#Order allow,deny
Require all granted
Allow from all
У меня также есть эта часть в конфигурации виртуального хоста:
ScriptAlias /cgi-bin "/var/www/html/project/cgi/"
<Directory "/var/www/html/project/cgi">
AllowOverride None
Options +Indexes +ExecCGI +MultiViews +SymLinksIfOwnerMatch
#Order allow,deny
Require all granted
Allow from all
</Directory>
Но все это не работает. Модуль cgi включен. Это двоичные файлы cgi на C ++. Что я делаю не так?
Хотя моя система - Apache24 на Windows 8.1, я думаю, что эта проблема является более общей независимо от системы. У меня была рабочая конфигурация с Apache22 в Windows 7, и я не сделал никаких заметных изменений при обновлении до apache24 в Windows 8.1. Когда я искал эту проблему в Google, я понял, что общего решения нет. Очевидно, Apache24 не видел my_file_extension как исполняемый файл.
Более того, хотя я очистил кеш Firefox из каталога «c: \ users \ appdata \ local \ temp» и удалил файл с диска; firefox постоянно выдавал один и тот же файл из моей файловой системы (а именно file: \\ c: \ users \ appdata \ local \ temp \ the-file). И эта ситуация существовала для каждого из моих серверов (один сервер на моей основной машине и сервер на другой тестовой машине).
Итак, решение, которое я нашел (я думаю, более общее, по крайней мере, работает для меня), использует директиву «Module mod_actions» (директива «Action»).
Подводя итог: моя старая конфигурация такая
#for alias_module
ScriptAlias /cgi-bin/ "c:/Apache24/cgi-bin/"
# for cgi directory
# my_file_extension is ksp
<Directory "c:/Apache24/cgi-bin">
AllowOverride None
Options +ExecCGI
Require all granted
Addhandler cgi-script .ksp
</Directory>
и новая конфигурация такая
#for alias_module
ScriptAlias /cgi-bin/ "c:/Apache24/cgi-bin/"
# for cgi directory
# my_file_extension is ksp
<Directory "c:/Apache24/cgi-bin">
AllowOverride None
Options +ExecCGI
Require all granted
</Directory>
# then the new directive i added;
# for any file in the server root directory that has an extension .ksp
<Location />
AddHandler ksp .ksp
Action ksp "/cgi-bin/CGI_KSP.exe"
</Location>
В документации apache для директивы Action, например,
Example: File extension
# Files of a particular file extension
AddHandler my-file-type .xyz
Action my-file-type "/cgi-bin/program.cgi"
In this example, requests for files with a file extension of .xyz are handled by the specified cgi script /cgi-bin/program.cgi.
Надеюсь это поможет...
Для начала, установка AllowOverride None
означает, что любой .htaccess
файл будет проигнорирован (что хорошо, поскольку у вас уже есть доступ к основной конфигурации Apache VirtualHost), поэтому вы также можете удалить .htaccess
файл.
Во-вторых, фактический файл CGI должен иметь правильные разрешения для выполнения Apache (chmod 755
), а если вы используете SELinux, вам может потребоваться активировать httpd_enable_cgi
SELinux boolean и убедитесь, что файл CGI помечен как httpd_sys_script_exec_t
.