Первая строка httpd.conf: AddHandler cgi-script .cgi .pl
не имеет значения, так как вы тестируете скрипты на Python, а не на Perl.И вы должны определить эти директивы в пределах местоположения вашего скрипта python и сказать apache, что он должен выполнять скрипты cgi в этом месте: Options +ExecCGI
.Этот фрагмент будет началом:
<Directory /path/to/sample.py />
Options +ExecCGI
AddHandler cgi-script .py
</Directory>
Приложение 1 :
Согласно моему последнему комментарию, попробуйте этот скрипт.Он должен выплевывать информацию о среде cgi.
#!/usr/bin/python
import cgi
cgi.test()
Приложение 2 :
Я получил ваш скрипт для работы с вышеуказанной конфигурацией.Проблема в том, что скрипт написан на python2.И интерпретатор по умолчанию apache вызывает для выполнения сценария python3 (по крайней мере, в моем случае, и есть вероятность, что это будет то же самое и для вас).
Это версия сценария hello world на python3:
#!/usr/bin/env python
# enable debugging
import cgitb
cgitb.enable()
print("Content-Type: text/plain;charset=utf-8")
print()
print("Hello World!")
Приложение 3 :
При первой ошибке убедитесь, что права доступа и права собственности на любой каталог и файлы, которые вы пытаетесь развернуть, указаны правильно.задавать.И попробуйте добавить эти директивы в httpd.conf:
Order allow,deny
Allow from all
, что даст вам следующее:
<Directory /path/to/sample.py />
Options +ExecCGI
AddHandler cgi-script .py
Order allow,deny
Allow from all
</Directory>
Для второй ошибки, если я что-то упустил, похоже, что apacheвызов интерпретатора Python 3 для выполнения вашего скрипта.Чтобы исключить эту возможность, вы можете попробовать следующее:
ls -al /usr/bin/python*
В этом списке перечислены интерпретаторы python, доступные в вашей системе.Если у вас более одного переводчика, вы получите что-то похожее на этот вывод:
/usr/bin/python -> python3*
/usr/bin/python2.6*
/usr/bin/python3*
Если нет, то это будет такой вывод:
/usr/bin/python -> python2.6*
/usr/bin/python2.6*
Чтобы убедиться, что этоне проблема, с которой вы столкнулись, попробуйте использовать этот модифицированный пример сценария:
#!/usr/bin/python2.6
# enable debugging
import cgitb
cgitb.enable()
print "Content-Type: text/plain\r\n\r\n"
print
print "Hello World!"
Вы заметите, что я прямо упомянул версию интерпретатора, которую должен вызывать apache, что ужасно.Но ради тестирования вы можете сделать это.Конечно, вы должны сопоставить #!/usr/bin/python2.6
с любым двоичным файлом, установленным на вашем сервере, и убедиться, что вы не смешиваете совместимый код Python 3 с интерпретатором Python 2 и наоборот.