В вашей конфигурации Apache вам нужно изменить директиву Directory на: <Directory /var/www/cgi-bin>
, если именно здесь вы намереваетесь разместить свои скрипты mod_python.
ОБНОВЛЕНИЕ:
Вы помещаете свой скрипт Python в /var/www/cgi-bin
, но /cgi-bin/
определено так, чтобы указывать на /usr/lib/cgi-bin
.Вам нужно стандартизировать в одном месте для /cgi-bin/
.
Вот что я бы предложил в качестве вашей исправленной конфигурации Apache.Обратите внимание, что я не удалил ни одной строки, я только закомментировал строки, которые не нужны или были заменены.
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
#<Directory /var/www>
<Directory /var/www/cgi-bin>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
AddHandler mod_python .py
PythonHandler mod_python.publisher
PythonDebug On
</Directory>
#ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
#<Directory "/usr/lib/cgi-bin">
# AllowOverride None
# Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
# Order allow,deny
# Allow from all
#</Directory>
ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
ОБНОВЛЕНИЕ 2:
Теперь, когда ваша конфигурация Apache правильная, и мы убедились, что ваш модуль импортируется правильно, вы все равно получаете 404. Это потому, что вы используете обработчик mod_python publisher , который ожидаетИспользование отличается от того, что вы реализовали.По сути, вы реализовали простой CGI-скрипт, который просто печатает вывод.У mod_python есть специальный API для выполнения вашего модуля.Вы должны попробовать этот пример , чтобы понять, как он работает.
Чтобы реализовать ваш тестовый модуль в качестве действительного издателя mod_python, вы можете изменить hello.py на это:
def index(req):
return """<html>
<head>
<title>Hello Word - First CGI Program</title>
</head>
<body>
<h2>Hello Word! This is my first CGI program</h2>
</body>
</html>"""
Обратите внимание, что причина получения ошибки 404 (даже если модуль был импортирован) объясняется на этой странице :
Обход остановится и HTTP_NOT_FOUNDбудет возвращено клиенту, если:
Любое из названий пройденного объекта начинается с подчеркивания ("_").Используйте подчеркивание для защиты объектов, которые не должны быть доступны из Интернета.
Обнаружен модуль.Опубликованные объекты не могут быть модулями по соображениям безопасности.
Если не удалось найти объект в пути, клиенту возвращается HTTP_NOT_FOUND.