django

warning: Creating default object from empty value in /htdocs/OLD_velt.de/modules/taxonomy/taxonomy.module on line 1390.

Verzeichnisse nur über SSL erreichbar machen - und das benutzerfreundlich!

Die Anforderung:
Ein Verzeichnis auf einem Apache-Webserver (genauer das Admin-Frontend von Django) sollte nur via SSL erreichbar sein. Wenn jemand via HTTP auf (schützenswerte) Unterverzeichnisse zugreift, dann soll er "passend" umgleitet werden. Letztendlich kommt noch dazu, dass dieser Location-Container mit vielen anderen Einstellungen per Include-Anweisung in 2 virtuelle Hosts (HTTP und HTTPS) geladen wird. Für einige ist es OK, dass sie sowohl per HTTP als auch HTTPS ausgeliefert werden, für andere eben nicht. Da neben Django noch mehrere Tools auf diesem Web-Server laufen, gibt's dafür einen extra Location-Container:

<Location "/admin/">
  SetHandler              python-program
  PythonHandler           django.core.handlers.modpython
  PythonPath              "['/PFAD/ZUM/PROJECT/'] + sys.path"
  PythonAutoReload        On
  SetEnv                  DJANGO_SETTINGS_MODULE  PROJEKT.settings
</Location>

Lösung 1:
Im Modul mod_ssl gibt es die Direktive SSLRequireSSL On, mit der man sicherstellen kann, dass es eben nur via SSL ausgeliefert wird.
Nachteil: Kommt ein Benutzer via HTTP bekommt er nur "Du kummst hier net rein!". Effektiv, aber nicht wirklich schön.

<Location "/admin/">
  SetHandler              python-program
  PythonHandler           django.core.handlers.modpython
  PythonPath              "['/PFAD/ZUM/PROJECT/'] + sys.path"
  PythonAutoReload        On
  SetEnv                  DJANGO_SETTINGS_MODULE  PROJEKT.settings

  SSLRequireSSL           On
</Location>

Lösung 2:
Mit Hilfe von mod_rewrite bzw. dessen Direktiven RewriteCond und RewriteRule wird getestet, ob die Anfrage per HTTP kam und wenn ja an die selbe URL nur mit HTTPS weitergeleitet:

<Location "/admin/">
  SetHandler        python-program
  PythonHandler     django.core.handlers.modpython
  PythonPath        "['/PFAD/ZUM/PROJECT/'] + sys.path"
  PythonAutoReload  On
  SetEnv            DJANGO_SETTINGS_MODULE  PROJEKT.settings

  RewriteEngine     On
  RewriteCond       %{HTTPS}    off
  RewriteRule       .*          https://%{HTTP_HOST}/%{REQUEST_URI}
</Location>

Et voilà! ;-)

Inhalt abgleichen
Powered by Olark