Zur Machart Studios Website
Back to top

.htaccess: 301 Weiterleitungen, URLs und mehr

Die Themen rund um 301 Weiterleitungen wurden zwar schon oft behandelt, aber trotzdem gibt es noch einige undokumentierte Tricks. Auch das ständige zusammensuchen der Infos ist mehr als mühselig. Von daher gibt es hier das volle Kompaktwissen zu 301 Weiterleitungen. Hier nun endlich die meisten Pflichteinträge und Vorlagen für eine Standard-htaccess Datei (.htaccess). Die hier beschriebenen Codeschnippsel helfen bei der Eintragung von URL-Redirects, der Trailing Slash Lösung, der Weiterleitung von Domains mit und ohne www und sonstigen 301 Weiterleitungen. Die Reihenfolge einzuhalten ist auch empfehlenswert.

html5-Video Mime-Type aktivieren

AddType video/ogg ogv
AddType audio/ogg oga
AddType video/mp4 mp4
AddType video/flv flv

Rewrite Engine einschalten

Vorausgesetzt mod_rewrite ist als Apache-Modul verfügbar

RewriteEngine on

301 Weiterleitungen

Domaineingaben ohne „www“ auf mit „www“ unter Einbehaltung des Dateinamens weiterleiten

RewriteCond %{HTTP_HOST} ^machart-studios.de [NC]
RewriteRule (.*) http://www.machart-studios.de/$1 [R=301,L]

Oder sogar allgemeingültige 301 Weiterleitungen, falls mehrere Domains auf den Ordner zeigen:

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*) http://www.%{HTTP_HOST}/$1 [R=301,L]

301 Weiterleitung mit Ausnahme eines Unterverzeichnis

Ihr möchtet alles per 301 weiterleiten außer ein bestimmtes Unterverzeichnis, dass weiterhin aufrufbar sein soll und somit als Ausnahme der allgemeingültigen Regel ausgeschlossen wird? Gar kein Problem! So geht’s:

RedirectMatch 301 ^/(?!ausnahme).* http://www.machart-studios.de

Mit dieser Zeile leitet Ihr alles auf die entsprechende domain.de weiter bis auf das Unterverzeichnis mit dem Namen „ausnahme“.

Trailing Slash an jeden Ordner automatisch anhängen

macht domain.de/ordner zu domain.de/ordner/

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://www.machart-studios.de/$1/ [L,R=301]

404 Dokument einbinden

ErrorDocument 404 http://www.machart-studios.de/404/

Manuelle 301 Weiterleitungen einrichten per htaccess

RedirectPermanent /screenshot http://machart-studios.de/lexikon/screenshot
RedirectPermanent /dateiformate http://machart-studios.de/lexikon/dateiformate

Manuelle URL-Korrektur per RewriteRule

RewriteRule ^news/$ http://www.machart-studios.de/aktuelles/ [R=permanent,L]

oder auch für dynamische Links

RewriteRule ^aktuelles/$ index.php?seite=aktuelles

Einzelne Seiten automatisch auf SSL umleiten

RewriteCond %{HTTPS} !=on 
RewriteCond %{REQUEST_URI} ^/content/kontakt.html$
RewriteRule ^(.*) https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

Einzelne Seiten automatisch auf SSL umleiten

Bei Skripten mit Parameteraufruf (Query Strings)

RewriteCond %{HTTPS} !=on 
RewriteCond %{QUERY_STRING} ^kontakt=1$
RewriteRule ^(.*) https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

Den Aufruf bestimmter Dateiformate verbieten

Der Upload von Bilddateien oder anderen Dokumenten durch den User einer Seite birgt gewisse Risiken in sich. Natürlich nur dann, wenn der User auf die Idee kommt, stattdessen einfach mal eine PHP-Datei hochzuladen. Die Abfrage eines MIME Types direkt im Uploadformular ist manipulierbar und wird nicht von jedem Browser unterstützt. Die Abfrage des Dateityps per PHP ermöglicht das Löschen unerwünschter Dateien. Aber doppelt hält bekanntlich besser. In folgendem Beispiel wird der Aufruf aller Dateien verboten und der Aufruf von Bilddateien anschließen erlaubt. Achtung: die .htaccess kann hier keine Leserechte setzen, die in den Dateieigenschaften schon nicht gewährt werden.

<FilesMatch ".*$">
   order deny,allow
     deny from all
  </FilesMatch>

<FilesMatch ".(gif|jpg|jpeg|png|GIF|JPG|JPEG|PNG)$">
     order deny,allow
     allow from all
</FilesMatch>

Den Aufruf bestimmter Dateien in bestimmten Ordnern verbieten

Will man den direkten Zugriff auf Dateien in einem definierten Ordnern verbieten kann folgende Zeile helfen.
So kann die Einstellung für einen Ordner sein, in dem Log-Dateien abgelegt werden. Diese sollen aber nicht von einem Benutzer einsehbar sein.

RewriteRule ^orderMit/GeschuetzenDateien/.*(\.txt|\.log)$ - [F]

PHP Uploadlimit und Skriptlaufzeit anheben

Läuft PHP als Apache Modul, so lassen sich Änderungen an den PHP Einstellungen über die .htaccess vornehmen. Post_max_size steht für das Limit in Megabyte des kompletten Uploads, upload_max_filesize für das Limit einer Datei, memory_limit gibt den verfügbaren RAM für das PHP Skript vor, was vor allem bei der Bildweiterverarbeitung wichtig ist (imagecopyresampled); max_execution_time gibt die maximale Ausführdauer eines Skriptes in Sekunden vor.

<FilesMatch (.*).php> 
 php_value post_max_size "100M" 
 php_value upload_max_filesize "50M" 
 php_value memory_limit "512M"
 php_value max_execution_time "800"
</FilesMatch>

Läuft PHP nicht als Modul, werden die oben genannten Zeilen ziemlich sicher einen 500 Internal Server Error erzeugen. Keine Panik – Für PHP als CGI kann man stattdessen eine php.ini in den Ordner der Website speichern und somit auch gezielt globale Werte überschreiben.

post_max_size = 50M
upload_max_filesize = 100M
memory_limit =  512M
max_execution_time = 800

PHP Fehler in Datei loggen

PHP als Apache Modul vorausgesetzt, lassen sich mit folgenden Zeilen alle PHP-Fehler bequem in einer Logdatei speichern.

php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors on
php_flag log_errors on
php_flag ignore_repeated_errors off
php_flag ignore_repeated_source off
php_flag report_memleaks on
php_flag track_errors on
php_value docref_root 0
php_value docref_ext 0	
php_value error_log /usr/www/users/IHREWEBSITE/php.log
php_value error_reporting  4595
php_value log_errors_max_len 0

Ich möchte an dieser Stelle nicht auf alle Parameter eingehen. Das Wichtigste ist der error_log, hier muss der Serverpfad zur Logdatei angegeben werden. Die Einstellung über die gewünschten Fehlerarten geschieht über die Aufaddierung folgender Werte:
1 für E_ERROR
2 für E_WARNING
4 für E_PARSE
8 für E_NOTICE
16 für E_CORE_ERROR
32 für E_CORE_WARNING
64 für E_COMPILE_ERROR
128 für E_COMPILE_WARNING
256 für E_USER_ERROR
512 für E_USER_WARNING
1024 für E_USER_NOTICE
2048 für E_STRICT
4096 für E_RECOVERABLE_ERROR
8192 für E_DEPRECATED
16384 für E_USER_DEPRECATED
32767 für E_ALL

PHP-Code in CSS oder JS Dateien ausführen

<FilesMatch "\.(css)$">
AddHandler application/x-httpd-php .css
</FilesMatch>

bzw.

<FilesMatch "\.(js)$">
AddHandler application/x-httpd-php .js
</FilesMatch>

Cookie Lebensdauer modifizieren

PHP muss hierzu als Apache Modul ausgeführt werden

php_value session.gc_maxlifetime 1000000
php_value session.cookie_lifetime 1000000

Automatisches Verzeichnislisting / Dateiauflistung deaktivieren

Options -multiviews

Serverseitige Korrektur von Tippfehlern deaktivieren

CheckSpelling Off

HTML -Aufruf in Query String umwandeln

Aus suche_pizza_mannheim.htm wird search.php?city=mannheim&q=pizza&perpage=25

RewriteRule suche_(.*)_(.*).htm$ /search.php?city=$1&q=$2&perpage=25

Wir hoffen, dass euch dieser kleine Blogbeitrag mit nützlichen Code-Snippets zu 301 Weiterleitungen weitergeholfen hat. Übrigens könnt ihr in diesem Beitrag nachlesen, wie sich 301 Weiterleitungen auf euer Google Ranking auswirken. Falls ihr Schwierigkeiten bei der Umsetzung habt, so könnt ihr natürlich einen Kommentar hinterlassen oder unser Team über unser Kontaktformular kontaktieren. Wir stehen euch bei Fragen zu 301 Weiterleitungen, Redirects und weiteren .htaccess-Einstellungen zur Verfügung.

Von Eduard Weber

Ein Machart-Macher mit ungestilltem Tatendrang, dazu voll Herz, Tiefe, Mut und Laune. Als gelernter Mediengestalter und Vollblutwerber im positiven Sinn, arbeitet er effizient und kundenorientiert. Kundenzufriedenheit ist eben das A und O für ihn. Eduard Weber ist zuständig für die strategische und kreative Kundenberatung, der seine Fäden im ganzen WorldWideWeb spinnt. Eduard Weber bei Google+

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Machart Studios Werbeagentur