APPEND_SLASH und PREPEND_WWW im Webserver

Geschrieben 8 Monate, 1 Woche zuvor

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.


Bisher wurde 1 Kommentar hinterlassen

Jannis Leidel

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

Keine neuen Kommentare für diesen Beitrag mehr möglich.


Du bist hier: mahner.org » Weblog » Django & Python » APPEND_SLASH und PREPEND_WWW im Webserver

↑ Nach oben

© 2001–2007 Martin Mahner. The content is licensed under (cc) creative commons.
This site is powered by Django. Hosted by manitu.

Generated: Di, 6 Jan 2009 13:52:23 +0100