Apache
htaccess Snippets
Umleiten, falls Hostname ohne www.
aufgerufen wird:
RewriteCond %{HTTP_HOST} !^www\. RewriteRule (.*) http://www.%{HTTP_HOST}/$1 [R=301,L]
Lange Expire-Header für Mediafiles:
<FilesMatch "\.(css|js)$"> ExpiresActive On ExpiresDefault "access plus 10 years" </FilesMatch>
Ajax Requests nicht im Browser Cachen lassen:
<IfModule mod_headers.c> Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT" Header set Pragma "no-cache" Header set Cache-Control "max-age=0, no-cache, no-store, \ must-revalidate, post-check=0, pre-check=0" Header unset Etag </IfModule>
Mediafiles gzipped ausliefern (gut kombinierbar mit Expire-Header s.o.):
<FilesMatch "\.(css|js)$"> SetOutputFilter DEFLATE </FilesMatch>
Alle Requests auf einen zentralen Dispatcher umleiten:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule .* dispatch.php [L,QSA] # or RewriteRule ^(.*)$ /app.wsgi/$1 [L,QSA]
Rewrites nur für nicht eingeloggte User:
RewriteCond %{HTTP_COOKIE} !sessionid=.*
Apache überzeugen einen UTF-8 Content-Type-Header zu senden:
AddDefaultCharset utf-8
mod_proxy
Wenn mod_proxy
keine Proxy-Requests ([p]
) ausführt fehlt evtl. das
Modul mod_proxy_http
. (Gibt leider keine Fehlermeldung, sondern wird
einfach nicht ausgeführt.)
Content-Negotiation
Um Apache entscheiden zu lassen welche Sprachversion ausgeliefert wird,
einfache z.B. zwei Dateien index.html.de
und index.html.en
anlegen.
In der .htaccess dann MultiViews aktivieren:
Options +MultiViews
Ein Aufruf von index.html
liefert dann die Version aus, die zum Accept-Language
Header des Clients passt. Soll nicht die englische ausgeliefert werden, wenn
keine passende Sprache gefunden wurde, kann man eine andere Sprache als
Default festlegen:
LanguagePriority de
Will ein Besucher, dessen Browser auf Deutsch eingestellt ist trotzdem die
englische Seite sehen, muss er einen Link anklicken, wenn dieser Link nicht auf
index.html.en
zeigen soll, kann man mod_rewrite
benutzen:
RewriteEngine On RewriteRule ^en/?$ /index.html.en [L] RewriteRule ^de/?$ /index.html.de [L]
Der Slash am Ende ist in diesem Fall sogar optional, dies führt zwar zu einer doppelten URL, erhöht aber die Userfreundlichkeit. Man könnte hier noch so weit gehen die URL mit oder ohne Slash auf die jeweils andere Umzuleiten, wenn unbedingt notwendig.
Es ist zwar grundsätzlich möglich die Dateien auch index.de.html
bzw.
index.en.html
zu bennen, aber man kann sie dann nicht als index.html
oder index.en
öffnen:
If you want to continue to use a MIME-type in your hyperlinks (e.g. foo.html) the language extension (including an encoding extension if there is one) must be on the right hand side of the MIME-type extension (e.g., foo.html.en).