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.
AddType video/ogg ogv AddType audio/ogg oga AddType video/mp4 mp4 AddType video/flv flv
Vorausgesetzt mod_rewrite ist als Apache-Modul verfügbar
RewriteEngine on
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]
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“.
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]
ErrorDocument 404 http://www.machart-studios.de/404/
RedirectPermanent /screenshot http://machart-studios.de/lexikon/screenshot RedirectPermanent /dateiformate http://machart-studios.de/lexikon/dateiformate
RewriteRule ^news/$ http://www.machart-studios.de/aktuelles/ [R=permanent,L]
RewriteRule ^aktuelles/$ index.php?seite=aktuelles
RewriteCond %{HTTPS} !=on RewriteCond %{REQUEST_URI} ^/content/kontakt.html$ RewriteRule ^(.*) https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
Bei Skripten mit Parameteraufruf (Query Strings)
RewriteCond %{HTTPS} !=on RewriteCond %{QUERY_STRING} ^kontakt=1$ RewriteRule ^(.*) https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
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>
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]
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 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
<FilesMatch "\.(css)$"> AddHandler application/x-httpd-php .css </FilesMatch>
bzw.
<FilesMatch "\.(js)$"> AddHandler application/x-httpd-php .js </FilesMatch>
PHP muss hierzu als Apache Modul ausgeführt werden
php_value session.gc_maxlifetime 1000000 php_value session.cookie_lifetime 1000000
Options -multiviews
CheckSpelling Off
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.