3

我有一个 Django 项目,我需要将它安装在我的 url 的两个不同子目录中,并且我需要在 / 处运行 Wordpress。所以:

*.example.com - WordPress
*.example.com/studio - django
*.example.com/accounts - django

这是我到目前为止的 httpd.conf:

<VirtualHost *:80>
    ServerName wildcard.localhost
    ServerAlias *.localhost

    AddType application/x-httpd-php .php
    DocumentRoot /var/empty

    Alias /site_media/ /home/zach/projects/python/myproject/static/
    Alias /media/ /home/zach/projects/python/myproject/env/lib/python2.6/site-packages/django/contrib/admin/media/
    Alias / /home/zach/projects/python/myproject/wordpress/

    WSGIScriptAlias /accounts /home/zach/projects/python/myproject/app/privio.wsgi
    WSGIScriptAlias /studio /home/zach/projects/python/myproject/app/privio.wsgi

    <Directory /home/zach/projects/python/myproject/app>
    Order allow,deny
    Allow from all
    </Directory>

    <Directory /home/zach/projects/python/myproject/wordpress>
    Order allow,deny
    Allow from all
    </Directory>

在我为 WordPress 添加配置之前,Django 应用程序运行良好。但是通过这个新设置,我可以看到 WordPress 安装在 /,但是 Django 应用程序没有得到服务。我在 Apache 配置方面有点菜鸟 - 我错过了什么?

4

2 回答 2

4

代替:

DocumentRoot /var/empty

和:

DocumentRoot /home/zach/projects/python/myproject/wordpress

消除:

Alias / /home/zach/projects/python/myproject/wordpress/

代替:

WSGIScriptAlias /accounts /home/zach/projects/python/myproject/app/privio.wsgi
WSGIScriptAlias /studio /home/zach/projects/python/myproject/app/privio.wsgi

和:

WSGIScriptAliasMatch ^(/(accounts|studio)) /home/zach/projects/python/myproject/app/privio.wsgi$1

换句话说,使用 DocumentRoot 来引用需要位于站点根目录而不是 Alias 指令的 wordpress。

WSGIScriptAliasMatch 如此 Django 本身认为它仍然安装在根站点,即使它实际上只传递了它的指定子 URL。这简化了 urls.py 的操作。

请注意,WSGI 脚本路径末尾的 $1 很重要,所以不要忽略它。

于 2010-08-21T11:06:29.453 回答
1

寻呼格雷厄姆邓普顿:)

我冒险猜测这条线

Alias / /home/zach/projects/python/myproject/wordpress/

覆盖它下面的所有内容。因此,任何请求/accounts都将由 wordpress 应用程序而不是 Django 应用程序处理。

文档中:

安装在站点的根部

相反,如果您想在站点的根目录挂载 WSGI 应用程序,只需在配置 WSGIScriptAlias 指令时将“/”列为挂载点。

WSGIScriptAlias / /usr/local/www/wsgi-scripts/myapp.wsgi

但是请注意,这样做意味着 DocumentRoot 中包含的任何静态文件都将被隐藏,并且针对与静态文件有关的 URL 的请求将由 WSGI 应用程序处理。

于 2010-08-20T20:59:21.950 回答