Django (wsgi) и Wordpress сосуществуют в виртуальном хосте Apache - PullRequest
2 голосов
/ 21 августа 2010

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

3 голосов
/ 21 августа 2010

Заменить:

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 важен, поэтому не пропускайте его.

1 голос
/ 21 августа 2010

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

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

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

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

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

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

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

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

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

...