Skip to main content

Running additional apps along side of your Django app

In a follow up to last night's post on setting up Django on WHM server, lets say you have a Django app you want to use on the main site, but you have additional code or apps(like a php forum) that you want to also use. After a little digging I beleive I've found the ideal configuration for this. There are 2 parts:
  1. Set up your django app's alias on a path other than the root of the site.  In my setup I've put the django app on the /site path.
  2. Modify your .htaccess in the root of the web site as follows:
    # BEGIN Django
    
    RewriteEngine On
    RewriteBase /
    RewriteRule "^$" "/site/$1" [QSA,PT,L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule "^(.*)$" "/site/$1" [QSA,PT,L]
    
    # END Django
To break this down:
  • We're applying this to all files from th root up:
    RewriteBase /
  • Replace an empty path with the path to the Django app located in /site/
    RewriteRule "^$" "/site/" [QSA,PT,L]
  • This second rule only applies if the requested path is neither a file nor a directory, if so then it treats the path as /site/<your requested path>
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule "^(.*)$" "/site/$1" [QSA,PT,L] 
The 3 flags I'm using are:
  • QSA (query string append) which appends the requested query string to the new path
  • PT (passthrough) passes the originally requested path to the application rather than the modified one, this way Django can process the URLs as if it's in the root of the site rather than if it were aliased and no special parsing is needed to correct any redirects created dynamically in Django.
  • L (last) simply means that if we've hit this rule, quit processing more.
One thing to note, is that because this is looking for existing files, if you're using an app with permalinks such as WordPress you'll need additional logic to prevent a redirect to the Django app.

Comments

Popular posts from this blog

Django on WHM

I spent pretty much all day today trying to peice together how to get Django running on a WHM server. Although I've done it before, I no longer have the configs form the old server and it was running EasyApache 3 which is no loner used. Since I've spent so much time trying to get to this point and wasn't able to find any clear documentation on how to set it up I figured I'd post it here. First we need to install python 3 since that's what Django requires, however as it's not available in the default repositories for CentOS, you'll need to install the EPEL Release repository by running: yum install epel-release Once the epel-release repository is installed, it's time to install python3, it's virtualenv installer and pip as follows: yum install python34 python34-pip python34-virtualenv After you have python 3 installed we need to compile mod_wsgi which is documented here . However we'll be changing 2 things and we need WHM's apache2...