Eine Sammlung nützlicher .htaccess Asuschnitte, alle an einem Ort.
**Disclaimer**: Obwohl das Einfügen der Ausschnitte in eine `.htaccess` Datei sehr Zeitspahrend ist gibt es Fälle, in denen bestimme Veränderungen nötig sein können. Benutzung auf eigene Gefahr.
**WICHTIG**: Apache 2.4 führt ein paar Änderungen ein, welche die Konfiguration zerstören können, hauptsächlich in der Zugriffskontrolle. Für mehr Informationen schauen Sie das [Upgrading Dokument](https://httpd.apache.org/docs/2.4/upgrading.html) und [dieses Ticket](https://github.com/phanan/htaccess/issues/2) an.
## Credits
Was wir hier tun ist hauptsächlich nützliche Ausschnitte überall aus dem Internet (z.B.: ein guter Ausschnitt ist von [Apache Server Configs](https://github.com/h5bp/server-configs-apache)) an einem Ort zu sammeln. Obwohl wir versuchen alle zu erwähnen ist es Möglich, dass manches fehlt. Wenn Sie glauben, dass etwas hiervon Ihre Arbeit ist und Sie erwähnt werden sollten, lassen Sie uns dies wissen.
Dies funktioniert für _jede_ Domain. [Quelle](https://stackoverflow.com/questions/4916222/htaccess-how-to-force-www-in-a-generic-way)
### nicht-www erzwingen
Es [wird](http://no-www.org/) [noch](http://www.sitepoint.com/domain-www-or-no-www/) [immer](https://devcenter.heroku.com/articles/apex-domains) [diskutiert](http://yes-www.org/), ob www oder nicht-www besser ist, also wenn Sie ein Fan von knappen Domains sind:
This example has an `index.fcgi` file in some directory, and any requests within that directory that fail to resolve a filename/directory will be sent to the `index.fcgi` script. It's good if you want `baz.foo/some/cool/path` to be handled by `baz.foo/index.fcgi` (which also supports requests to `baz.foo`) while maintaining `baz.foo/css/style.css` and the like. Get access to the original path from the PATH_INFO environment variable, as exposed to your scripting environment.
``` apacheconf
RewriteEngine On
RewriteRule ^$ index.fcgi/ [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.fcgi/$1 [QSA,L]
```
Dies ist eine weniger effiziente Variante von der FallbackResource direktive (da die Benutzung von `mod_rewrite` komplexer ist als einfach nur die `FallbackResource` Direktive zu nutezn), aber sie ist auch flexibler.
### Eine komplette Seite weiterleiten
``` apacheconf
Redirect 301 / http://newsite.com/
```
Auf diese Art bleiben die Links intakt. `www.oldsite.com/some/crazy/link.html` wird zu `www.newsite.com/some/crazy/link.html`. Dies ist sehr hilfreich, wenn Sie eine Seite nur zu einer neuen Domain "umziehen". [Quelle](http://css-tricks.com/snippets/htaccess/301-redirects/)
Abre Moment, das wird Sie selbst von Ihrem Inhalt aussperren! Also...
### Kompletten Zugriff außer Ihren verbieten
``` apacheconf
## Apache 2.2
Order deny,allow
Deny from all
Allow from xxx.xxx.xxx.xxx
## Apache 2.4
# Require all denied
# Require ip xxx.xxx.xxx.xxx
```
`xxx.xxx.xxx.xxx` ist Ihre IP. Wenn Sie die letzen drei Ziffern beispielsweise mit 0/12 ersetzen, spezifizieren Sie einen Bereich von IPs im selben Netzwerk. Dadurch müssen sie nicht alle erlaubten IPs aus einem Netz separat auflisten. [Quelle](http://speckyboy.com/2013/01/08/useful-htaccess-snippets-and-hacks/)
Natürlich gibt es auch eine umgekehrte Version:
### Zugriff erlauben, außer von Spammern
``` apacheconf
## Apache 2.2
Order deny,allow
Allow from all
Deny from xxx.xxx.xxx.xxx
Deny from xxx.xxx.xxx.xxy
## Apache 2.4
# Require all granted
# Require not ip xxx.xxx.xxx.xxx
# Require not ip xxx.xxx.xxx.xxy
```
### Zugriff zu versteckten Dateien und Verzeichnissen verbieten
Versteckte Dateien und Verzeichnisse (die, deren Name mit einem Punkt `.` startet) sollen meistens, wenn nihct immer, abgesichert werden. Zum Beispiel: `.htaccess`, `.htpasswd`, `.git`, `.hg`...
``` apacheconf
RewriteCond %{SCRIPT_FILENAME} -d [OR]
RewriteCond %{SCRIPT_FILENAME} -f
RewriteRule "(^|/)\." - [F]
```
Anternativ können Sie auch einen `Not Found` Fehler ausgeben, damit der Angreifer keine Hinweise bekommt:
``` apacheconf
RedirectMatch 404 /\..*$
```
### Zugriff zu Backup- und Quelldateien verbieten
Diese Dateien können von manchen Editoren (wie Vi/Vim) zurückgelassen werden, und stellen ein goßes Sicherheitsrisiko dar, wenn jemand darauf zugreifen kann.
_Expire headers_ (Ablauf Header) sagen dem Browser, ob er eine bestimmte Datei vom Server, oder aus dem Cache holen soll. Es ist ratsam den Ablauf von statischen Inhalt weit in die Zukunft zu legen.
Wenn Sie die Versionierung nicht durch Dateinamen kontrollieren ziehen sie in Betracht die Cachezeit für Resourcen wie CSS und JS auf etwas wie eine Woche zu veringern. [Quelle](https://github.com/h5bp/server-configs-apache)
``` apacheconf
<IfModulemod_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 (kann nicht umbenannt werden!)
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 Schriftarten
ExpiresByType application/font-woff2 "access plus 1 month"
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>
```
### eTags abschalten
``` apacheconf
Durch das Entfernen des `ETag` Headers machen Sie es Caches und Browsern unmöglich die Dateien zu validieren, wodurch sie von Ihren `Cache-Control` und `Expires` Headern abhängig sind. [Quelle](http://www.askapache.com/htaccess/apache-speed-etags.html)
Manchmal wollen Sie den Browser dazu zwingen Inhalt zu downloaden, anstatt nur anzuzeigen.
``` apacheconf
<Files*.md>
ForceType application/octet-stream
Header set Content-Disposition attachment
</Files>
```
Es gibt auch ein Yang zu diesem Yin:
### Download verhindern
Manchmal wollen Sie den Browser dazu zwingen Inhalt nur anzuzeigen, anstatt ihn zu downlaoden.
``` apacheconf
<FilesMatch"\.(tex|log|aux)$">
Header set Content-Type text/plain
</FilesMatch>
```
### Cross-Domain Schriftarten erlauben
Web-Schriftarten von CDN funktionieren möglicherweise nicht in Firefox oder IE [siehe CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing). Dieser Ausschnitt löst dieses Problem.
Wenn Sie auf einem Shared Host sind ist es möglich, dass mehr als eine PHP Version installiert ist, und manchmal wollen Sie eine bestimmte Version für ihre Webseite. Zum Beispiel, [Laravel](https://github.com/laravel/laravel) benötigt PHP >= 5.4. Der folgene Ausschnitt sollte die PHP Version für Sie wechseln.
``` apacheconf
AddHandler application/x-httpd-php55 .php
# Anternativ können sie AddType benutzen
AddType application/x-httpd-php55 .php
```
### Internet Explorer Kompatibilitätsansicht deaktivieren
Kompatibilitätsansicht in IE kann sich darauf auswirken, wie manche Webseiten dargestellt werden. Der folgende Ausschnitt sollte IE dazu zwingen die Edge Rendering Engine zu benutzen, und die Kompatibilitätsansicht zu deaktivieren.
``` apacheconf
<IfModulemod_headers.c>
BrowserMatch MSIE is-msie
Header set X-UA-Compatible IE=edge env=is-msie
</IfModule>
```
### WebP Bilder bereitstellen
Wenn [WebP Bilder](https://developers.google.com/speed/webp/?csw=1) unterstützt werden und ein Bild mit einer `.webp` Endung, mit dem selben Namen und am welben Ort wie ein jpg/png Bild, gefundne wird, dann wird das WebP Bild anstelle des jpg/png angezeigt.