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

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配置不是很熟悉 - 我错过了什么?
2个回答

5

替换:

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来指代需要位于站点根目录的WordPress,而不是使用Alias指令。
WSGIScriptAliasMatch使Django本身认为它仍然挂载在站点根目录,即使只有指定的子URL实际上被传递。这简化了urls.py的操作。
请注意,WSGI脚本路径末尾的$1非常重要,不要遗漏。

1

分页 Graham Dumpleton :)

我猜测这一行

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

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

来自文档:

在站点根目录挂载

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

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

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


这在虚拟主机中不起作用。Apache 拒绝:/path/to/project/vhost.conf 的第 3 行语法错误:WSGIPythonPath 不能出现在 <VirtualHost> 部分内。 - naught101

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接