Django (wsgi) и Wordpress сосуществуют в виртуальном хосте Apache

У меня есть проект 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>

Before I added the config for WordPress, the Django app was working fine. But with this new setup I am able to see the WordPress install at /, but the Django app isn't getting served. I'm sort of a noob at Apache config - what am I missing?


person UrLicht    schedule 20.08.2010    source источник


Ответы (2)


Заменять:

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.

Обратите внимание, что $1 в конце пути к сценарию WSGI важен, поэтому не оставляйте его выключенным.

person Graham Dumpleton    schedule 21.08.2010

Пейджинг Грэм Дамплтон :)

Я рискну предположить, что линия

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

переопределяет все, что находится под ним. Поэтому любые запросы к /accounts будут обрабатываться приложением WordPress, а не приложением Django.

Из документации:

Монтирование в корне сайта

Если вместо этого вы хотите смонтировать приложение WSGI в корне сайта, просто укажите '/' в качестве точки монтирования при настройке директивы WSGIScriptAlias.

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

Однако обратите внимание, что это будет означать, что любые статические файлы, содержащиеся в DocumentRoot, будут скрыты, а запросы к URL-адресам, относящимся к статическим файлам, вместо этого будут обрабатываться приложением WSGI.

person Manoj Govindan    schedule 20.08.2010
comment
Это не работает с виртуальными хостами. Апач отказывается: Syntax error on line 3 of /path/to/project/vhost.conf: WSGIPythonPath cannot occur within <VirtualHost> section. - person naught101; 19.11.2013