2010-08-20 3 views
2

J'ai un projet Django dont j'ai besoin monté dans deux sous-répertoires différents de mon URL, et j'ai besoin de Wordpress en cours d'exécution à /. Alors:Django (wsgi) et Wordpress coexistant dans Apache virtualhost

*.example.com - WordPress 
*.example.com/studio - django 
*.example.com/accounts - django 

Voici le httpd.conf que j'ai jusqu'à présent:

<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> 

Avant ajouté la configuration pour WordPress, l'application Django fonctionnait très bien. Mais avec cette nouvelle configuration, je peux voir l'installation de WordPress sur /, mais l'application Django n'est pas servie. Je suis un peu un noob à la config Apache - qu'est-ce qui me manque?

Répondre

3

Remplacer:

DocumentRoot /var/empty 

avec:

DocumentRoot /home/zach/projects/python/myproject/wordpress 

Supprimer:

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

Remplacer:

WSGIScriptAlias /accounts /home/zach/projects/python/myproject/app/privio.wsgi 
WSGIScriptAlias /studio /home/zach/projects/python/myproject/app/privio.wsgi 

avec:

WSGIScriptAliasMatch ^(/(accounts|studio)) /home/zach/projects/python/myproject/app/privio.wsgi$1 

En d'autres termes, utiliser DocumentRoot pour désigner wordpress qui doit être à la racine du site et de ne pas la directive Alias. Le WSGIScriptAliasMatch permet à Django de penser qu'il est toujours monté sur le site racine, même si seules les sous-URL nommées sont effectivement passées. Cela simplifie les choses pour urls.py. Notez que le $ 1 à la fin du chemin de script WSGI est important, ne le laissez pas.

1

Paging Graham Dumpleton :)

Je suppose que d'une hasarde la ligne

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

tout overrides dessous. Par conséquent toutes les demandes à /accounts seront traitées par l'application wordpress plutôt que par l'application Django.

De l'documentation:

Montage à la racine du site

Si au contraire vous voulez monter une application WSGI à la racine d'un site, il suffit de la liste '/' comme point de montage lors de la configuration de la directive WSGIScriptAlias.

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

Prenez note cependant que cela impliquera que tous les fichiers statiques contenus dans le DocumentRoot seront cachés et les demandes contre les URL relatives aux fichiers statiques seront plutôt traités par l'application WSGI.

+0

Cela ne fonctionne pas avec les hôtes virtuels. Apache refuse: 'Erreur de syntaxe sur la ligne 3 de /path/to/project/vhost.conf: WSGIPythonPath ne peut pas apparaître dans section'. – naught101

Questions connexes