Search code examples
phpdjangoapache-config

How do I run Django and PHP together on one Apache server?


I can currently run either Django through mod_wsgi or PHP on my Apache server.

My Django projects run at: http://localhost and source is at C:/django_proj

My PHP projects run at: http://php.localhost and source is at C:/web

If I turn both on, php.localhost and localhost go to the Django project. I've already set them up through Apache virtual hosts.

Here are some relevant lines in httpd.conf:

DocumentRoot "C:/web"

<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>

<Directory "C:/web">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

<Directory "C:/django_proj">
    Order allow,deny
    Allow from all
</Directory>

Include "C:/django_proj/apache/apache_django_wsgi.conf"

The relevant lines in apache_django_wsgi.conf is:

WSGIScriptAlias / "C:/django_proj/apache/proj.wsgi"
<Directory "C:/django_proj/apache">
    Order allow,deny
    Allow from all
</Directory>

Inside httpd-vhosts.conf:

<Directory C:/web>
    Order Deny,Allow
    Allow from all
</Directory>

<Directory C:/django_proj>
    Order Deny,Allow
    Allow from all
</Directory>

<VirtualHost *:80>
    DocumentRoot "C:/django_proj"
    ServerName localhost
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "C:/web"
    ServerName php.localhost
</VirtualHost>

My PHP project is current inaccessible. Does anyone have any ideas what I'm missing?


Solution

  • I run dozens of mod_wsgi/Django sites, PHP sites, and a Rails site with a single Apache.

    It's mostly done using virtual hosts but I have some that are running both on the same domain.

    You just need to put your WSGIScriptAlias /... after any other Location/Alias directives.

    Lets say, for example, I want to run phpMyAdmin on the same domain as a Django site. The config would look something like this:

    Alias /phpmyadmin /full/path/to/phpmyadmin/
    <Directory /full/path/to/phpmyadmin>
       Options -Indexes
       ...etc...
    </Directory>
    
    WSGIScriptAlias / /full/path/to/django/project/app.wsgi
    <Directory /full/path/to/django/project>
        Options +ExecCGI
        ...etc...
    </Directory>
    

    Edit:

    Your configuration should look something like this:

    <VirtualHost *:80>
        DocumentRoot "C:/django_proj"
        ServerName localhost
        WSGIScriptAlias / "C:/django_proj/apache/proj.wsgi"
        <Directory "C:/django_proj/apache">
            Options +ExecCGI
            Order allow,deny
            Allow from all
        </Directory>
    </VirtualHost>
    
    <VirtualHost *:80>
        DocumentRoot "C:/web"
        ServerName php.localhost
        Alias / C:/web
        <Directory C:/web>
            Options Indexes FollowSymLinks
            AllowOverride None
            Order Deny,Allow
            Allow from all
        </Directory>
    </VirtualHost>
    

    You don't need those <Directory> directives in http.conf... do all your configuration in the Virtual hosts.

    Also, completely get rid of the <Directory /> block.