---
layout: null
permalink: .htaccess
sitemap:
  exclude: true
---

# ------------------------------------------------------------------------------
# | Protecting the website                                                     |
# ------------------------------------------------------------------------------

# AuthType Basic
# AuthName "Protected Area"
# AuthUserFile {{ site.server_path }}/.htpasswd
# require valid-user

# ------------------------------------------------------------------------------
# | Block Framing of page to prevent click jacking                             |
# ------------------------------------------------------------------------------
Header set X-Frame-Options DENY

# ------------------------------------------------------------------------------
# | Redirecting/Removing sites                                                 |
# ------------------------------------------------------------------------------

# Redirects (Gone)
Redirect Gone /archiv/P0/
Redirect Gone /information/
Redirect Gone /main/kategorie/design/
Redirect Gone /main/kategorie/fundstueck/
Redirect Gone /main/kategorie/musik/
Redirect Gone /main/kategorie/screencast/
Redirect Gone /notiz/abmahnung-kogakure-zitat-karl-valentin/
Redirect Gone /notiz/bash_profile-striptease/
Redirect Gone /notiz/blender-animationsfilm-big-buck-bunny/
Redirect Gone /notiz/chris-jordan-zeigt-unsere-masslosigkeit-in-erschreckenden-bildern/
Redirect Gone /notiz/cms-weblog-systeme-reloaded/
Redirect Gone /notiz/die-schatzinsel-bei-pro7/
Redirect Gone /notiz/django-und-das-framework-ding/
Redirect Gone /notiz/einfach-die-welt-veraendern/
Redirect Gone /notiz/expression-engine-2-sneak-preview/
Redirect Gone /notiz/glueckliche-mitarbeiter/
Redirect Gone /notiz/meine-groesste-dummheit-vorerst/
Redirect Gone /notiz/musik-tipp-poets-of-the-fall/
Redirect Gone /notiz/platzsparend-browser-bookmark-unicode/
Redirect Gone /notiz/textmate-snippet-dummy-image-generator/
Redirect Gone /notiz/warum-google-wave-kommunikation-veraendern-wird/
Redirect Gone /notiz/why-we-fight/
Redirect Gone /notiz/wie-marions-kochbuch-google-manipuliert/
Redirect Gone /notizbuch/P0/
Redirect Gone /projekte/
Redirect Gone /projekte/bewernick/
Redirect Gone /projekte/mieterverein-hamburg/
Redirect Gone /projekte/praxis-elena-kohl/
Redirect Gone /projekte/sushi-dreams/

# Redirects (Permanent)
Redirect 301 /+/                                                                 https://plus.google.com/104687479698350625994/

# Redirects with URL changes
Redirect 301 /notiz/das-koi-design-inspiration-und-idee                          /2007/koi-design
Redirect 301 /notiz/django-folder-fuer-mac-os-x                                  /2007/django-folder-mac-osx
Redirect 301 /notiz/django-folder-mac-osx                                        /2007/django-folder-mac-osx
Redirect 301 /notiz/blender-folder-fuer-mac-os-x-leopard                         /2008/blender-folder-mac-osx
Redirect 301 /notiz/theme-kaijin-fuer-das-moinmoin-wiki                          /2008/theme-kaijin-moinmoin-wiki
Redirect 301 /notiz/theme-kaijin-moinmoin-wiki                                   /2008/theme-kaijin-moinmoin-wiki
Redirect 301 /notiz/terminal-stoeckchen                                          /2008/terminal-most-used-commands
Redirect 301 /notiz/django-relaunch-von-kogakure-de                              /2008/django-relaunch-kogakure-de
Redirect 301 /notiz/django-relaunch-kogakure-de                                  /2008/django-relaunch-kogakure-de
Redirect 301 /notiz/server-verwaltung-mit-capistrano                             /2008/server-verwaltung-capistrano
Redirect 301 /notiz/server-verwaltung-capistrano                                 /2008/server-verwaltung-capistrano
Redirect 301 /notiz/grundlagen-von-python-django-fuer-anfaenger                  /2008/grundlagen-python-django-anfaenger
Redirect 301 /notiz/grundlagen-python-django-anfaenger                           /2008/grundlagen-python-django-anfaenger
Redirect 301 /notiz/kostenlose-vektorkarten-mit-openstreetmap                    /2008/kostenlose-vektorkarten-openstreetmap
Redirect 301 /notiz/kostenlose-vektorkarten-openstreetmap                        /2008/kostenlose-vektorkarten-openstreetmap
Redirect 301 /notiz/2008-django-git                                              /2008/django-git
Redirect 301 /notiz/django-fuer-webdesigner                                      /2009/django-webdesigner
Redirect 301 /notiz/django-webdesigner                                           /2009/django-webdesigner
Redirect 301 /notiz/2010-jahresrueckblick                                        /2010/jahresrueckblick
Redirect 301 /notiz/mein-setup-2013                                              /2013/mein-setup

# Redirects of old pages
Redirect 301 /notiz/volume-reparieren-unter-mac-osx                              /2007/volume-reparieren-unter-mac-osx
Redirect 301 /notiz/subversion-1-theorie-und-funktionsweise                      /2007/subversion-1-theorie-und-funktionsweise
Redirect 301 /notiz/domains-extern-hosten                                        /2007/domains-extern-hosten
Redirect 301 /notiz/subversion-2-installation                                    /2007/subversion-2-installation
Redirect 301 /notiz/j2ee-vs-ruby-python-frameworks                               /2007/j2ee-vs-ruby-python-frameworks
Redirect 301 /notiz/subversion-3-einrichten-des-repository                       /2007/subversion-3-einrichten-des-repository
Redirect 301 /notiz/subversion-4-importieren-einer-projektstruktur               /2007/subversion-4-importieren-einer-projektstruktur
Redirect 301 /notiz/versionskontrolle-mit-git                                    /2007/versionskontrolle-mit-git
Redirect 301 /versionskontrolle-mit-git                                          /2007/versionskontrolle-mit-git
Redirect 301 /notiz/lebensmittel-datenbank                                       /2007/lebensmittel-datenbank
Redirect 301 /notiz/subversion-5-arbeiten-mit-subversion                         /2007/subversion-5-arbeiten-mit-subversion
Redirect 301 /notiz/wunschliste-computerspiele-als-film                          /2007/wunschliste-computerspiele-als-film
Redirect 301 /notiz/subversion-6-ein-paar-wichtige-befehle                       /2007/subversion-6-ein-paar-wichtige-befehle
Redirect 301 /notiz/provoc-vokabeln-lernen-unter-mac-os-x                        /2007/provoc-vokabeln-lernen-unter-mac-os-x
Redirect 301 /notiz/eineinhalb-jahre-gtd-eine-billanz                            /2007/eineinhalb-jahre-gtd-eine-billanz
Redirect 301 /notiz/traditionelle-japanische-farben-photoshop-illustrator        /2007/traditionelle-japanische-farben-photoshop-illustrator
Redirect 301 /notiz/gtd-mit-omnifocus-oder-things                                /2007/gtd-mit-omnifocus-oder-things
Redirect 301 /notiz/das-war-mein-2007-eine-jahresbilanz                          /2007/das-war-mein-2007-eine-jahresbilanz
Redirect 301 /notiz/5-gefaehrliche-dinge-die-jedes-kind-gemacht-haben-sollte     /2008/5-gefaehrliche-dinge-die-jedes-kind-gemacht-haben-sollte
Redirect 301 /notiz/gtd-analog-vs-digital-0-zu-1                                 /2008/gtd-analog-vs-digital-0-zu-1
Redirect 301 /notiz/lokalisierung-von-projekten-mit-django                       /2008/lokalisierung-von-projekten-mit-django
Redirect 301 /notiz/weiterleitung-redirect-django                                /2008/weiterleitung-redirect-django
Redirect 301 /notiz/server-verwaltung-fabric                                     /2008/server-verwaltung-fabric
Redirect 301 /notiz/einstieg-in-git-als-versionskontrollsystem                   /2009/einstieg-in-git-als-versionskontrollsystem
Redirect 301 /notiz/gitweb-theme-github-stil                                     /2009/gitweb-theme-github-stil
Redirect 301 /notiz/things-evernote-gtd-mac-osx                                  /2009/things-evernote-gtd-mac-osx
Redirect 301 /notiz/home-atemberaubende-erde-dokumentation-yann-arthus-bertrand  /2009/home-atemberaubende-erde-dokumentation-yann-arthus-bertrand
Redirect 301 /notiz/git-praesentation                                            /2009/git-praesentation
Redirect 301 /notiz/buchtipp-rework-37signals                                    /2010/buchtipp-rework-37signals
Redirect 301 /notiz/appletv-leihfilme-itunes                                     /2010/appletv-leihfilme-itunes
Redirect 301 /notiz/geloeste-django-probleme                                     /2010/geloeste-django-probleme
Redirect 301 /notiz/webstandards-magazin-django                                  /2010/webstandards-magazin-django
Redirect 301 /notiz/auto-complete-im-terminal                                    /2010/auto-complete-im-terminal
Redirect 301 /notiz/vim                                                          /2010/vim
Redirect 301 /notiz/automatisierung-mit-keyboard-maestro                         /2011/automatisierung-mit-keyboard-maestro
Redirect 301 /notiz/buchtipp-decodeunicode                                       /2011/buchtipp-decodeunicode
Redirect 301 /notiz/duplikation-ist-in-ordnung                                   /2013/duplikation-ist-in-ordnung
Redirect 301 /notiz/wichtig-website-neu                                          /2014/relaunch-responsive-web-design
Redirect 301 /notiz/automatisierte-installation-mac-os-x                         /2014/automatisierte-installation-mac-os-x
Redirect 301 /main/kategorie/gtd                                                 /category/produktivitaet
Redirect 301 /main/kategorie/python                                              /tag/python
Redirect 301 /main/kategorie/django                                              /tag/django
Redirect 301 /notiz/django                                                       /tag/django

Redirect 301 /information/impressum                                             /impressum
Redirect 301 /main/kategorie/tutorial                                           /tag/tutorial
Redirect 301 /main/kategorie/download                                           /tag/download
Redirect 301 /notizbuch                                                         /articles
Redirect 301 /archiv                                                            /articles
Redirect 301 /kategorie                                                         /category

# ##############################################################################
# # ERRORS                                                                     #
# ##############################################################################

# ------------------------------------------------------------------------------
# | 404 error prevention for non-existing redirected folders                   |
# ------------------------------------------------------------------------------

# Prevent Apache from returning a 404 error for a rewrite if a directory
# with the same name does not exist.
# http://httpd.apache.org/docs/current/content-negotiation.html#multiviews
# http://www.webmasterworld.com/apache/3808792.htm

Options -MultiViews

# ------------------------------------------------------------------------------
# | Custom error messages / pages                                              |
# ------------------------------------------------------------------------------

# You can customize what Apache returns to the client in case of an error (see
# http://httpd.apache.org/docs/current/mod/core.html#errordocument), e.g.:

ErrorDocument 404 /error/404
ErrorDocument 410 /error/410
ErrorDocument 500 /error/500

# ##############################################################################
# # INTERNET EXPLORER                                                          #
# ##############################################################################

# ------------------------------------------------------------------------------
# | Better website experience                                                  |
# ------------------------------------------------------------------------------

# Force IE to render pages in the highest available mode in the various
# cases when it may not: http://hsivonen.iki.fi/doctype/ie-mode.pdf.
# Use, if installed, Google Chrome Frame.

<IfModule mod_headers.c>
  Header set X-UA-Compatible "IE=edge,chrome=1"
  # `mod_headers` can't match based on the content-type, however, we only
  # want to send this header for HTML pages and not for the other resources
  <FilesMatch "\.(appcache|crx|css|eot|gif|htc|ico|jpe?g|js|m4a|m4v|manifest|mp4|oex|oga|ogg|ogv|otf|pdf|png|safariextz|svg|svgz|ttf|vcf|webapp|webm|webp|woff|xml|xpi)$">
    Header unset X-UA-Compatible
  </FilesMatch>
</IfModule>

# ##############################################################################
# # MIME TYPES AND ENCODING                                                    #
# ##############################################################################

# ------------------------------------------------------------------------------
# | Proper MIME types for all files                                            |
# ------------------------------------------------------------------------------

<IfModule mod_mime.c>

  # Audio
  AddType audio/mp4                                   m4a f4a f4b
  AddType audio/ogg                                   oga ogg

  # JavaScript
  # Normalize to standard type (it's sniffed in IE anyways):
  # http://tools.ietf.org/html/rfc4329#section-7.2
  AddType application/javascript                      js jsonp
  AddType application/json                            json

  # Video
  AddType video/mp4                                   mp4 m4v f4v f4p
  AddType video/ogg                                   ogv
  AddType video/webm                                  webm
  AddType video/x-flv                                 flv

  # Web fonts
  AddType application/font-woff                       woff
  AddType application/vnd.ms-fontobject               eot

  # Browsers usually ignore the font MIME types and sniff the content,
  # however, Chrome shows a warning if other MIME types are used for the
  # following fonts.
  AddType application/x-font-ttf                      ttc ttf
  AddType font/opentype                               otf

  # Make SVGZ fonts work on iPad:
  # https://twitter.com/FontSquirrel/status/14855840545
  AddType     image/svg+xml                           svg svgz
  AddEncoding gzip                                    svgz

  # Other
  AddType application/octet-stream                    safariextz
  AddType application/x-chrome-extension              crx
  AddType application/x-opera-extension               oex
  AddType application/x-shockwave-flash               swf
  AddType application/x-web-app-manifest+json         webapp
  AddType application/x-xpinstall                     xpi
  AddType application/xml                             atom rdf rss xml
  AddType image/webp                                  webp
  AddType image/x-icon                                ico
  AddType text/cache-manifest                         appcache manifest
  AddType text/vtt                                    vtt
  AddType text/x-component                            htc
  AddType text/x-vcard                                vcf

</IfModule>

# ------------------------------------------------------------------------------
# | UTF-8 encoding                                                             |
# ------------------------------------------------------------------------------

# Use UTF-8 encoding for anything served as `text/html` or `text/plain`.
AddDefaultCharset utf-8

# Force UTF-8 for certain file formats.
<IfModule mod_mime.c>
  AddCharset utf-8 .atom .css .js .json .rss .vtt .webapp .xml
</IfModule>

# ##############################################################################
# # URL REWRITES                                                               #
# ##############################################################################

# ------------------------------------------------------------------------------
# | Rewrite engine                                                             |
# ------------------------------------------------------------------------------

# Turning on the rewrite engine and enabling the `FollowSymLinks` option is
# necessary for the following directives to work.

# If your web host doesn't allow the `FollowSymlinks` option, you may need to
# comment it out and use `Options +SymLinksIfOwnerMatch` but, be aware of the
# performance impact: http://httpd.apache.org/docs/current/misc/perf-tuning.html#symlinks

# Also, some cloud hosting services require `RewriteBase` to be set:
# http://www.rackspace.com/knowledge_center/frequently-asked-question/why-is-mod-rewrite-not-working-on-my-site

<IfModule mod_rewrite.c>
  Options +FollowSymlinks
  # Options +SymLinksIfOwnerMatch
  RewriteEngine On
  RewriteBase /
</IfModule>

# Activate support for WebP
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTP_ACCEPT} image/webp
  RewriteCond %{DOCUMENT_ROOT}/$1.webp -f
  RewriteRule (.+)\.(jpe?g|png)$ $1.webp [T=image/webp,E=accept:1]
</IfModule>

<IfModule mod_headers.c>
  Header append Vary Accept env=REDIRECT_accept
</IfModule>

# ------------------------------------------------------------------------------
# | Append slash to URL                                                        |
# ------------------------------------------------------------------------------

<IfModule mod_rewrite.c>
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_URI} !/$
  RewriteCond %{REQUEST_URI} !(.*)/$
  RewriteRule ^(.*)$ $1/ [L,R=301]

  RewriteCond %{HTTP_HOST} !^stefanimhoff\.de$
  RewriteRule ^(.*)$ {{ site.url }}/$1 [R=301,L]
</IfModule>

# ##############################################################################
# # SECURITY                                                                   #
# ##############################################################################

# ------------------------------------------------------------------------------
# | File access                                                                |
# ------------------------------------------------------------------------------

# Block access to directories without a default document.
# Usually you should leave this uncommented because you shouldn't allow anyone
# to surf through every directory on your server (which may includes rather
# private places like the CMS's directories).

<IfModule mod_autoindex.c>
  Options -Indexes
</IfModule>

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

# Block access to hidden files and directories.
# This includes directories used by version control systems such as Git and SVN.

<IfModule mod_rewrite.c>
  RewriteCond %{SCRIPT_FILENAME} -d [OR]
  RewriteCond %{SCRIPT_FILENAME} -f
  RewriteRule "(^|/)\." - [F]
</IfModule>

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

# Block access to backup and source files.
# These files may be left by some text editors and can pose a great security
# danger when anyone has access to them.

<FilesMatch "(^#.*#|\.(bak|config|dist|fla|inc|ini|log|psd|sh|sql|sw[op])|~)$">
  Order allow,deny
  Deny from all
  Satisfy All
</FilesMatch>

# ##############################################################################
# # WEB PERFORMANCE                                                            #
# ##############################################################################

# ------------------------------------------------------------------------------
# | Pagespeed                                                                  |
# ------------------------------------------------------------------------------

# mod_pagespeed
ModPagespeed On
ModPagespeedDisableFilters rewrite_css,rewrite_images,rewrite_javascript,combine_css,combine_javascript,extend_cache

<IfModule mod_pagespeed.c>
  SetOutputFilter MOD_PAGESPEED_OUTPUT_FILTER
</IfModule>

# ------------------------------------------------------------------------------
# | Compression                                                                |
# ------------------------------------------------------------------------------

<IfModule mod_deflate.c>

  # Force compression for mangled headers.
  # http://developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping
  <IfModule mod_setenvif.c>
    <IfModule mod_headers.c>
      SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
      RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
    </IfModule>
  </IfModule>

  # Compress all output labeled with one of the following MIME-types
  # (for Apache versions below 2.3.7, you don't need to enable `mod_filter`
  #  and can remove the `<IfModule mod_filter.c>` and `</IfModule>` lines
  #  as `AddOutputFilterByType` is still in the core directives).
  <IfModule mod_filter.c>
    AddOutputFilterByType DEFLATE application/atom+xml \
                                  application/javascript \
                                  application/json \
                                  application/rss+xml \
                                  application/vnd.ms-fontobject \
                                  application/x-font-ttf \
                                  application/x-web-app-manifest+json \
                                  application/xhtml+xml \
                                  application/xml \
                                  font/opentype \
                                  image/svg+xml \
                                  image/x-icon \
                                  text/css \
                                  text/html \
                                  text/plain \
                                  text/x-component \
                                  text/xml
  </IfModule>

</IfModule>

# ------------------------------------------------------------------------------
# | ETag removal                                                               |
# ------------------------------------------------------------------------------

# Since we're sending far-future expires headers (see below), ETags can
# be removed: http://developer.yahoo.com/performance/rules.html#etags.

# `FileETag None` is not enough for every server.
<IfModule mod_headers.c>
  Header unset ETag
</IfModule>

FileETag None

# ------------------------------------------------------------------------------
# | Expires headers (for better cache control)                                 |
# ------------------------------------------------------------------------------

# The following expires headers are set pretty far in the future. If you don't
# control versioning with filename-based cache busting, consider lowering the
# cache time for resources like CSS and JS to something like 1 week.

<IfModule mod_expires.c>

  ExpiresActive on
  ExpiresDefault                                      "access plus 1 month"

  # CSS
  ExpiresByType text/css                              "access plus 1 year"

  # Data interchange
  ExpiresByType application/json                      "access plus 0 seconds"
  ExpiresByType application/xml                       "access plus 0 seconds"
  ExpiresByType text/xml                              "access plus 0 seconds"

  # Favicon (cannot be renamed!)
  ExpiresByType image/x-icon                          "access plus 1 week"

  # HTML components (HTCs)
  ExpiresByType text/x-component                      "access plus 1 month"

  # HTML
  ExpiresByType text/html                             "access plus 0 seconds"

  # JavaScript
  ExpiresByType application/javascript                "access plus 1 year"

  # Manifest files
  ExpiresByType application/x-web-app-manifest+json   "access plus 0 seconds"
  ExpiresByType text/cache-manifest                   "access plus 0 seconds"

  # Media
  ExpiresByType audio/ogg                             "access plus 1 month"
  ExpiresByType image/gif                             "access plus 1 month"
  ExpiresByType image/jpeg                            "access plus 1 month"
  ExpiresByType image/png                             "access plus 1 month"
  ExpiresByType video/mp4                             "access plus 1 month"
  ExpiresByType video/ogg                             "access plus 1 month"
  ExpiresByType video/webm                            "access plus 1 month"

  # Web feeds
  ExpiresByType application/atom+xml                  "access plus 1 hour"
  ExpiresByType application/rss+xml                   "access plus 1 hour"

  # Web fonts
  ExpiresByType application/font-woff                 "access plus 1 month"
  ExpiresByType application/vnd.ms-fontobject         "access plus 1 month"
  ExpiresByType application/x-font-ttf                "access plus 1 month"
  ExpiresByType font/opentype                         "access plus 1 month"
  ExpiresByType image/svg+xml                         "access plus 1 month"

</IfModule>
