How do I go about redirecting all requests for domain.com/… to www.domain.com/… with a 301 in a django site?
Obviously this can’t be done in urls.py because you only get the path part of the URL in there.
I can’t use mod rewrite in .htaccess, because .htaccess files do nothing under Django (I think).
I’m guessing something in middleware or apache conf?
I’m running Django on a Linux server with Plesk, using mod WSGI
4
Answers
The WebFaction discussion someone pointed out is correct as far as the configuration, you just have to apply it yourself rather than through a control panel.
Put in .htaccess file, or in main Apache configuration in appropriate context. If inside of a VirtualHost in main Apache configuration, your would have ServerName be http://www.example.com and ServerAlias be example.com to ensure that virtual host handled both requests.
If you don’t have access to any Apache configuration, if need be, it can be done using a WSGI wrapper around the Django WSGI application entry point. Something like:
Fixing this up to include the URL within the site and dealing with https is left as an exercise for the reader. 🙂
The PREPEND_WWW setting does just that.
This also can be done with a middleware.
Some examples:
This is a better version of snippet-510:
There is a lightweight way to do that involving VirtualHosts and mod_alias Redirect directive. You can define two VirtualHosts, one holding the redirect and another holding the site configuration:
And that will do the job.