Django (wsgi) 和 Wordpress 在 Apache 虚拟主机中共存

UrL*_*cht 3 django wordpress mod-wsgi apache-config

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

*.example.com - WordPress
*.example.com/studio - django
*.example.com/accounts - django
Run Code Online (Sandbox Code Playgroud)

这是我迄今为止拥有的 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>
Run Code Online (Sandbox Code Playgroud)

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

Gra*_*ton 5

代替:

DocumentRoot /var/empty
Run Code Online (Sandbox Code Playgroud)

和:

DocumentRoot /home/zach/projects/python/myproject/wordpress
Run Code Online (Sandbox Code Playgroud)

消除:

Alias / /home/zach/projects/python/myproject/wordpress/
Run Code Online (Sandbox Code Playgroud)

代替:

WSGIScriptAlias /accounts /home/zach/projects/python/myproject/app/privio.wsgi
WSGIScriptAlias /studio /home/zach/projects/python/myproject/app/privio.wsgi
Run Code Online (Sandbox Code Playgroud)

和:

WSGIScriptAliasMatch ^(/(accounts|studio)) /home/zach/projects/python/myproject/app/privio.wsgi$1
Run Code Online (Sandbox Code Playgroud)

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

WSGIScriptAliasMatch 是这样的,Django 本身认为它仍然安装在根站点,即使实际上只有它的指定子 URL 被传递。这简化了 urls.py 的事情。

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