APPEND_SLASH und PREPEND_WWW im Webserver

Djangos per Default aktive Middleware CommonMiddleware stellt zwei Parameter zur Verfügung, mit denen sich das Verhalten aller URLs ändern lässt.

  • PREPEND_WWW leitet eine Anfrage auf eine Seite ohne voran gestelltes www "http://example.org/" automatisch zur Domain mit www "http://www.example.org/" um.
  • APPEND_SLASH fügt der URL, wenn sie nicht mit einem Slash endet, diesen an. Das ist auch das normale Verhalten der meisten Webserver, wenn ein Verzeichnis angefordert wird.

Beides ist eine Aufgabe die der Webserver schneller und wahrscheinlich resourcenschonender erledigen kann. Wer mod_rewrite seinem Apache zur Verfügung stellt, kann diese beiden Optionen auch direkt erledigen lassen. Ohne den mod_wsgi/mod_python Unterbau und ohne dass eine Codezeile von Django ausgeführt wird.

Dieser Schnipsel gehört in die VHost deiner Domain -- oder je nach Aufbau deines Django-Projekts auch in eine .htaccess Datei des entsprechenden Ordners:

# Voodoo-Engine starten    
RewriteEngine On
#RewriteLog /path/to/rewrite.log
#RewriteLogLevel 9

# Prepend WWW
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^/(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

# Append Slash
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !.*/$
RewriteRule ^(.*)$ $1/ [R=301,L]

Nützlich ist dieser Schnipsel auch allen, die Djangos Flatpages einsetzen. Wenn der User eine URL besucht, die auf eine Flatpage zeigt, aber den Slash am Ende vergisst, bekommt er nur einen 404-NotFound Fehler zurück. Ein Bug der schon etwas länger diskutiert wird und hoffentlich in Zukunft auch gefixt wird. Einen Patch gibt es jedenfalls schon.


  • Jannis Leidel June 17, 2008

    Auch sehr praktisch, sollte man mal irgendwo ins offizielle Wiki stellen.


Comments closed

Sorry, new comments are no longer allowed for this entry.

Write me an email if you have feedback or any questions regarding this post. If you found this post useful and just want to say thank you then don't forget that I have an Amazon Wishlist. :-)


↑ to the elevators

© 2001—2010 Martin Mahner. This is an I ♥ Django Project.

Admin | Generated: Wed, 1 Sep 2010 06:16:23 +0200