Friday, October 29, 2021

[SOLVED] Reconfiguring Apache to serve website root from new php source and specific sub-urls from old django site

Issue

How do I make a django website (in a apache/mod_wsgi/django setup) which is configured to serve from the root url, serve only for specific sub-url but not the root url? The root url shall be served from a new source (php). All this with a minimum of reconfiguration.

Currently the condensed virtualhost config looks like this

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName mysite.com

    # mappings to django
    WSGIScriptAlias / /opt/mysite/mysite.wsgi
    <Directory /opt/mysite>
        Order allow,deny
        Allow from all
    </Directory>

    # mappings to wordpress 
    Alias /wp/ /var/www/mysiteWP/
    <Location "/var/www/mysiteWP/">
            Options -Indexes
    </Location>
    Alias /show/ /var/www/mysiteWP/
    Alias /collection/ /var/www/mysiteWP/
</VirtualHost>

As you can see django and php(wordpress) are running side by side. Wordpress just serving mysite.com/show/ and mysite.com/collection/. Django is serving the rest, including the root url mysite.com. This configuration works.

What I want to do now, is, I want to make wordpress serve everything except some specific urls which should be served by django. E.g. django should just serve mysite.com/shop/ and mysite.com/news/ but nothing else, also excluding mysite.com.

How would I do this with a minimum of reconfiguration?

Thanks for your answers and hints.


Solution

Props to Graham Dumpleton. He answered another question of the exact same kind in this Q&A: Django (wsgi) and Wordpress coexisting in Apache virtualhost.

In short, after configuring Apache so the root url is served from php, the solution to route specific sub urls to django, but making it think its mount point is still the root, is WSGIScriptAliasMatch. To this (example)problem the simple addition to the apache virtual host config was this:

WSGIScriptAliasMatch ^(/(shop|news)) /opt/mysite/mysite.wsgi$1

The whole virtual host config for this example is:

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName mysite.com

    # mappings to django
    WSGIScriptAliasMatch ^(/(shop|news)) /opt/mysite/mysite.wsgi$1
    <Directory /opt/mysite>
        Order allow,deny
        Allow from all
    </Directory>

    # mappings to wordpress 
    DocumentRoot /var/www/mysiteWP/
    <Location "/var/www/mysiteWP/">
            Options -Indexes
    </Location>
</VirtualHost>


Answered By - Creech