Reconfiguring Apache to serve website root from ne

2020-04-18 05:12发布

问题:

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 admin@mysite.com
    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.

回答1:

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 admin@mysite.com
    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>