我在让 Django 使用我的 Apache 配置时遇到了重大问题。我没有创建服务器,所以我对服务器的工作方式没有太多余地。本质上有三个虚拟主机:
board.site.org、students.site.org 和 insider.site.org
insider.site.org 是我最关心的。我负责它下面的一个小站点(最好在 insider.site.org/tech)。我决定将我的文件与原始目录分开,以免弄乱那里的东西(因为非 python 站点已经存在)。无论如何,我的虚拟主机在/etc/apache2/vhosts.d/中的单独文件中定义
这是 insider.site.org 的配置
内部人员.conf
LoadModule python_module /usr/lib64/apache2/mod_python.so
<VirtualHost 10.10.1.1:80>
ServerName insider.site.org
DocumentRoot /media/nss/VWEB/docs
<Directory /media/nss/VWEB/docs>
Options Indexes Multiviews
AllowOverride None
Order Allow,Deny
#Allow from 10.11.0.78
Allow from all
</Directory>
Alias /tech /srv/www/Tech
<Directory /srv/www/Tech>
SetHandler python-program
PythonPath "['/srv/www/Tech'] + sys.path"
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE Tech.settings
PythonDebug On
</Directory>
Alias /media /srv/www/Media
<Directory /srv/www/Media>
SetHandler None
</Directory>
</VirtualHost>
- 请注意,当我说 site.org 时,我指的是我的网站,而不是实际的“site.org”网址。
现在,这似乎对我来说应该是正确的,但出于某种原因,访问 http://insider.site.org/tech/给我这个错误:
Mod_python error: "PythonHandler mod_python.publisher"
Traceback (most recent call last):
File "/usr/lib64/python2.4/site-packages/mod_python/apache.py", line 299, in HandlerDispatch result = object(req)
File "/usr/lib64/python2.4/site-packages/mod_python/publisher.py", line 98, in handler path=[path])
File "/usr/lib64/python2.4/site-packages/mod_python/apache.py", line 454, in import_module f, p, d = imp.find_module(parts[i], path)
ImportError: No module named index
而 http://insider.site.org/tech (没有尾部正斜杠)导致 403 错误。我在这个目录中确实有 Django,但它根本没有被执行(我在 tech 文件夹下的所有目录中都有 _ init _.py,这是从我自己的个人计算机上复制的(它跑出了 django 测试服务器))所以我不认为这是问题所在。这根本行不通:-(
感谢任何帮助,谢谢。
最佳答案
对于您的第一个问题,您确定在您指定的 PythonPath 中有 Django 吗?在我的服务器上,我的 PythonPath 中的列表包括包含顶级 django 目录的目录,该目录本身包含 bin、contrib、admin、core 等目录,此外还有 __init__.py。 (还要确保您的 Apache 用户对这些文件和目录具有读取和执行权限,尽管我确信这是显而易见的。)这是我的设置:
<Location "/myapp">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE LogFileAnalyzer.settings
PythonDebug on
PythonPath "['/srv/www/dir_containing_django_dir', '/srv/www/myapp_dir'] + sys.path"
</Location>
请注意,我在这里使用位置而不是目录,因此您的情况可能会有所不同。
对于你的第二个问题,这听起来像是 mod_rewrite 的问题。参见 here .您可以通过定义重写规则让服务器自动附加您需要的斜杠:
RewriteEngine on
RewriteBase /~quux/
RewriteRule ^foo$ foo/ [R]
希望对您有所帮助。
关于django - 使用 mod_python 设置 Django,使用 Alias 在 SuSE 上设置 Apache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/582631/