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 配置有点菜鸟 - 我缺少什么?
代替:
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 很重要,因此不要忽略它。