Aufgrund der Tatsache, dass ich mich mit dem Betrieb meiner Website auch damit beschäftige wie man die htaccess Datei verwendet und die damit verbunden Möglichkeiten ausschöpft möchte ich hier an dieser Stelle eine Zusammenfassung meiner Erfahrungen aufzählen. Vielleicht kann das Eine oder Andere für jemaden nützlich sein.
Anleitungen und Erklärungen gibt es viele im Netz die einem erklären wie das Eine oder Andere Problem gelöst werden kann. Jedoch, so musste ich zumindest feststellen, sind in den meisten Anleitungen nur die 0815 Probleme angeführt. Sobald man etwas speziellere Aufgabenstellungen hat trennt sich auch im Web unter den Suchtreffern schnell die Spreu vom Weizen. So musste auch ich zu meinem Bedauern feststellen, dass ich leider keine Lösung für mein spezielles Problem fand (Unterverzeichnis aus der URL entfernen). Da ich mich nun mal mit dieser Materie nicht so sehr beschäfftigt habe bin ich auch auf diesem Sektor kein Genie sondern Laie! Um diesen Umstand Rechnung zu tragen und für mich persönlich auch die Möglichkeit zu haben eine Nachschlagquelle parat zu haben, habe ich hier zum Einen Erklärungen angeführt die ggf. hilfreich sein können als auch Problemlösungen zu speziellen Themen.
Für einen Anfänger wie mich stellen sich Anfangs eigentlich die Fragen:
- Wie funktionieren eigentlich RewriteRules?
- Was bedeuten die kryptischen Zeichnefolgen?
Obwohl man sich mit diesen Fragen eigentlich nicht beschäftigen will sondern gleich mit ein paar Codezeilen zur Tat schreiten will. Dies ist auch vernünftig wenn man kein spezielles Problem zu lösen hat, so dass man im Web auch genügend Lösungen findet. Ist man jedoch genötigt speziellere Lösungen zu schaffen so ist es unumgänglich sich mit diesen oben angeührten Fragen zu beschäftigen ansonsten verzweifelt man an der Aufgabenstellung.
Wie funktionieren eigentlich RewriteRules und htaccess?
Wie funktionieren eigentlich RewriteRules und htaccess?
Fangen wir zuerst mit der eigentlichen Datei hataccess an und das ist wichtig für das weitere Verständnis wie die Regeln abgearbeitet werden und gültig sind!
Eine htaccess-Datei befindet sich in der Regel im Basisverzeichnis einer Webseite (das Verzeichnis, das in den Domain Einstellungen als Zielpfad eingetragen ist, auch als Dokument Root bezeichnet).
Die Einstellungen sind im aktuellen Verzeichnis und allen Unterverzeichnissen wirksam. Mit einer htaccess-Datei in einem Unterverzeichnis lassen sich jedoch Einstellungen überschreiben.
Die htaccess-Datei wird bei jedem Aufruf des Apache Webservers und für jede einzelne Komponente der Webseite ausgewertet.
Der Webserver ist übrigens sehr pingelig was die korrekte Schreibweise, die Syntax, der Einträge angeht. Der kleinste Fehler führt in der Regel zu einem "Server Error 500". Daher muss nach jeder Änderung an der htaccess-Datei geprüft werden, ob die Webseite noch aufgerufen werden kann, da diese Fehler auch nicht protokolliert werden.
Vielfach stellt sich die Frage nach der Reihenfolge von RewriteRules. Dabei sollten unbedingt die folgenden beiden Punkte beachtet werden:
- Reihenfolge: verbieten - weiterleiten - umschreiben
- Speziellere Regeln vor allgemeinen Regeln
Sobald man mit dem mod_rewrite zu arbeiten anfängt, denkt man sich logischerweise, dass es mit Links arbeitet, aber bei der Benutzung von mod_rewrite in .htaccess ist es nicht so. In Wirklichkeit wird im RewriteRule nicht der Link, sondern der Pfad zur angefragten Datei übergeben.
Was bedeuten die kryptischen Zeichenfolgen?
Was bedeuten die kryptischen Zeichenfolgen?
Nun, bei diesen Zeichenfolgen handelt es sich zumeist um so genannte reruläre Ausdrücke oder auch Regulas Expressions genannt. Es sind Suchmuster (Pattern) für Zeichenketten. Mit deren Hilfe ist es nun möglich Regel allgemein zu beschreiben ohne dazu dezitiert immer nur die genaue Bezeichnung anführen zu müssen. Dies hat den Vorteil, dass man mit nur z.B. einer Zeile Code einen großen Bereich an Regeln formulieren kann wo man ansosnten für jede Regel eine Zeile benötigen würde. Mit ihnen ist es möglich z.B. Benutzereingaben wie E-Mail-Adressen oder URLs auf Konformität hin zu überprüfen was im letzteren Fall bei den URLs in der htaccess-Datei geschieht.
In der nachfolgenden Tabelle sind einige reguläre Ausdrücke und ihre Bedeutung angeführt:
^ |
|
$ |
|
| | dient als ODER-Verknüpüfung |
. | Der Punkt steht für ein beliebiges Zeichen. |
\. | Ein Punkt (z.B. in einem Domainnamen muss er so angegeben werden). |
.+ | Ein oder mehrere beliebige Zeichen. |
\.\+ | Ein Punkt und ein Pluszeichen. |
* | Kein oder beliebig viele Wiederholungen eine vorangestellten Zeichens oder Klamerausdruck |
.* | Kein oder mehr beliebige Zeichen. |
? | Keinmaliges oder einmaliges Auftreten eines vorangestellten Zeichens oder Klammerausdrucks |
.? | Kein oder ein beliebiges Zeichen. |
^a | "a" am Anfang einer URL oder eines Dateinamens. |
a$ | "a" am Ende einer URL oder eines Dateinamens. |
a | b |
(.*) | (Gruppe) die in ".*" gefundene Zeichenkette wird in der Variable "$1" gespeichert wenn es sich um eine RewriteRule handelt. Wenn es sich um eine RewriteCond handelt wird die Zeichenkette in "%1" gespeichert. Es dürfen mehrere Gruppen in einem Ausdruck verwendet werden. Dementsprechend werden die Inhalte in "$2", "$3", .... "$99" abgelegt. |
(a | b) |
[-0-9a-z]* | Beliebig viele Bindestriche, Zahlen oder Kleinbuchstaben. |
[^/]* | Beliebig viele Zeichen, jedoch kein Slash. |
!regexp | =true wenn der Ausdruck nicht gefunden wird. Das Rufzeichen negiert etwas. |
<2000 | Vergleichsausdruck ist kleiner als 2000. |
>1000 | Vergleichsausdruck ist grösser als 1000. |
="" | Vergleichsausdruck ist ein leerer String. |
-d | Vergleichsausdruck zeigt auf ein Verzeichniss. |
-f | Vergleichsausdruck zeigt auf eine Datei. |
-l | Vergleichsausdruck zeigt auf einen Link. |
-s | Vergleichsausdruck zeigt auf eine nicht leere Datei. |
-U | Vergleichsausdruck zeigt auf eine gültige URL, welche der Client lesen darf. |
-F | Vergleichsausdruck zeigt auf eine Datei, welche der Client lesen darf.. |
Einen weiteres Hinweis möchte ich euch ebenfalls nicht unterschlagen, nämlich die Tatsache, dass der Zugriff über den Browser auf Dateien die mit ".ht" beginnen in der Regel grundsätzlich vom Apache-Server automatisch blockiert werden. Somit kann niemand deine .htaccess Datei ansehen. Sie funktioniert zudem nur serverintern was eine Manipulation durch einen Benutzer unmöglich macht.
Beim Schreiben einer .htaccess Datei ist zudem noch wichtig zu wissen, dass du für jeden Befehl eine neue Zeile verwenden musst und dass natürlich das mod-rewrite aktiviert sein muss.
Kommentare in der htaccess-Datei
Kommentare in der .htaccess-Datei
Zur besseren Übersicht und auch Lesbarkeit empfehle ich euch eure .htaccess Datei vor den eigentlichen Befehlszeilen zu kommentieren das erleichtert die Lesbarkeit ungemein und hilft einem auch bei der Fehlersuche da man sofort den entsprechenden Abschnitt findet bei welchem man Fehler bekommt. Ein Kommentar wird mit der Raute # eingeleitet. Alles was nach der Raute in der Zeile steht wird als Kommentar gewertet aber Achtung keinen Zeilenumbuch verwenden und in der nächsten Zeile weiter kommentieren, dies würde unweigerlich zu Fehlern führen. Ein weitere Zeile für einen Kommentar müsst ihr ebenfalls wieder mit einem # Zeichen einleiten.
Server Variablen
HTTP_HOST
In dieser Variablen steht nur die Domain darin, also kein:
- Protokoll z.B. http, https...
- kein Pfad z.B. /ordner/
- keine Datei z.B. Index.php
RewriteCond Conditions
Mit RewriteCond werden die Bedingungen (Conditions) definiert unter welchen die nachfolgende Regel (RewriteRule) angewendet werden soll.
Die RewriteCond besteht aus folgenden drei Werten:
- Test-String: Dies ist eine Zeichenkette, die überprüft werden soll
- Bedingung (Conditions): diese beschreibt die Überprüfung, die auf Test-String angewendet werden soll
- [flags]: dies sind zusätzliche Optionen z.B. NC, OR
Test-String
Neben gewöhnlichem Text, kann die jeweilige Zeichenkette auf folgende Konstrukte beinhalten:
Test-String | Erklärung |
$1 | Mit $n (1<= n <= 9) kann man auf zwischengespeicherte Werte der aktuellen RewriteRule-Direktive zugreifen |
%2 | Mit %n (1<= n <= 9) kann man auf zwischengespeicherte Werte der letzten RewriteCond-Direktive zugreifen |
%{request_URI} | Mit %{name} kann man auf eine Umgebungsvariable name von Apache zugreifen |
Bedingung (Conditions)
Bedingung beschreiben Bedingungen, die auf den Test-String zutreffen muss. Die Bedingung ist ein so genannter Regulärer Ausdruck.
Bedingung | Erklärung |
<Vergleichsstring | Der Test-String ist im Alphabet vor dem Vergleichstring |
>Vergleichstring | Der Test-String ist im Alphabet nach dem Vergleichstring |
=Vergleichstring | Test-String und Vergleichstring werden auf Gleichheit überprüft. Wenn der Vergleichstring "" ist, wird geprüft, ob der Test-String leer ist. |
-d | Der Test-String wird als Pfadname interpretiert und es wird überprüft, ob es ein Verzeichnis ist (d: directory, Verzeichnis) |
-f | Der Test-String wird als Pfadname interpretiert und es wird überprüft, ob es eine reguläre Datei ist (f: file, Datei) |
-s | Der Test-String wird als Pfadname interpretiert und es wird überprüft, ob es eine reguläre Datei mit einen Inhalt größer als 0 ist (s: size, Größe) |
-l | Der Test-String wird als Pfadname interpretiert und es wird überprüft, ob es ein symbolischer Link ist (l: link, Verknüpfung) |
-F | Der Test-String wird als Pfadname interpretiert und es wird überprüft, ob es eine Datei ist und diese zugänglich ist (inklusive Zugangskontrollen, z.B. mit .htaccess) |
-U | Es wird überprüft, ob Test-String eine gültige URL ist (inklusive Zugangskontrollen, z.B. mit .htaccess) |
Beachten Sie jedoch, dass allen Bedingungen auch ein ! vorangestellt werden kann um die Ausdrücke zu verneinen d.h. wenn die Bedingung NICHT erfüllt ist dann führe die nachfolgende Rule aus.
Leerer Query-String also kein ?.. an der URL:
RewriteCond %{REQUEST_URI ^/?$
Testen ob ein Cookie vorhanden ist:
RewriteCond %{HTTP_COOKIE} !COOKIENAME=COOKIEVALUE; [NC]
Testen ob eine Datei vorhanden ist:
RewriteCond %{DOCUMENT_ROOT}/index.htm -f
Parameter (Flags) und Stauscodes
Flags (Parameter)
Die so genannten Flags oder auch Parameter (spezielle Angaben) können per Komma auch kombiniert werden und müssen zusätzlich noch mit einem Paar eckige Klammern umschlossen werden.
Die Angabe von flags ist optional, damit ist es möglich das Verhalten der RewriteCond zu beeinflussen.
flag | Erklärung |
NC | nocase Bei String-Vergleichen wird nicht mehr zwischen Groß- und Kleinschreibung unterschieden |
OR | ornext Mit diesem Flag wird die aktuelle Bedingung mit einem logischen ODER mit der nächsten Bedingung verknüpft, das heißt, es braucht nur eine der beiden Bedingungen zutreffen. Standard ist eine UND Verknüpfung. |
Man kann mehrere Flags verwenden indem man diese in einem Paar eckige Klammern setzt und mit Komma trennt z.B. [NC,OR]
Der Weiterleitung solltem man einen Stauscode mitgeben, doch worin liegt dabei der Unterschied?
Permanente Weiterleitung Stauscode 301
Diese Weiterleitung ist zu verwenden, wenn die Weiterleitung dauerhaft bestehen bleiben soll z.B. weil die Navigationsstruktur einer Webseite umgestellt wurde. Vor allem aber, wenn gelöschte URLs zu einem neuen Ziel umgeleitet werden. Sie wird mit dem Satuscode R=301
aktiv gesetzt.
Eine solche Weiterleitung zeigt z.B. Google an, dass es sich um eine permanente Weiterleitung handelt was in den Suchrankings doppelten Content vermeidet. So wird auch in Suchmaschinen auf Dauer nur diese angezeigt.
Hierbei steht das "R" für "force redirect" und forciert den 301 redirect.
Temporäre Weiterleitung Stauscode 302
Hierbei handelt es sich um vorübergehende Umleitungen z.B. Umleitungen während Wartungsarbeiten. Die Weiterleitung erfolgt nur vorübergehend, anschließend gilt wieder die bisherige Adresse. Sie wird mit dem Stauscode R=302
akriv gesetzt.
Die Umleitung ist technisch gleich wie bei der Weiterleitung 301. Der Statuscode ist jedoch für Suchmaschinen wichtig da sie anhand des Statuscodes entscheiden, wie mit der alten URL umzugehen ist.
Ende der Regel L
Zeigt auf das die aktuelle Regel beendet ist und steht für "last rule" es stoppt den entsprechenden Befehl. Am Ende der RewriteRule Zeile wird der Code für die Weiterleitung (Redirect) in eckigen Klammern angegeben. Mit dem zusätzlichen Parameter L (Letzter, Last) kann man festlegen, dass die weiteren Anweisungen in der htaccess-Datei ignoriert werden sollen, wenn diese Regel zutrifft.
L
RewriteRules
RewriteRules sind wie folgt aufgebaut:
RewriteRule Argument1 Argument2 [spezielle Angaben]
Argument1: Vom Besucher aufgerufene URL
Argument2: URL zu der der Webserver intern unsichtbar für den Besucher weiterleitet bzw. umschreibt.
Spezielle Angaben: Bei diesen Angaben handelt es sich z.B. um so genannte Flags, siehe dazu weiter oben im Text.
Redirect's - Weiterleitungen
Mit dem nun zuvor erklärten ist es uns nun möglich, so genannte Redirect's in die htaccess-Datei zu schreiben und dies auch besser zu verstehen. Nachfolgend sind einige Beispiele für die häufigsten Fälle angeführt in welchen solche Regeln benötigt werden.
Die Weiterleitung von Domains und Anfragen zu einzelnen Webseiten ist eine der Hauptanwendungen der .htaccess Datei. Das notwendige Apache Modul lautet mod_rewrite und muss jedoch in der .htaccess Datei zunächst mit folgendem Eintrag aktiviert werden:
RewriteEngine On
Dabei ist tunlichtst darauf zu achten, dass diese Anweisung in der htaccess-Datei nur ein mal vorkommt!
Beispiele von Weiterleitungen
301 Redirect auf eine andere Seite
301 Redirect auf eine andere Seite
Redirect 301 /alte-index.php https://www.deine-domain.tld/Unterverzeichnis/neue-index.php
oder als alternative Schreibweise:
Redirect permanent /alte-index.php https://www.deine-domain.tld/Unterverzeichnis/neue-index.php
301 auf eine andere Website
301 Redirect auf eine andere Website
Redirect 301 / https://www.andere-domain.tld
Der Code 301 sagt den Suchmaschinen, dass die gewünschte angeforderte Seite permanent einer neuen URL zugeordnet worden ist. Dies bedeutet, dass die ursprüngliche (alte) URL aus dem Index genommen und das Ranking auf die aktuelle (neue) URL gesetzt wird.
Im Gegensatz zum Code 302 welcher den Suchmaschinen mitteilt, dass die angeforderte URL nur temporär auf der neuen URL zu erreichen ist. Die alte URL bleibt somit im Index und behält ihr Ranking. Dieses Redirect mit dem Code 302 wird kaum noch verwendet und gerade bei langfristigen Änderungen in der Struktur einer Website sollte daher der redirect 301 verwendet werden.
301 Weiterleitung mit Ausnahme eines Unterverzeichnis
301 Weiterleitung mit Ausnahme eines Unterverzeichnis
Wenn Sie alles per 301 weiterleiten möchten ausgenommen eines bestimmten Unterverzeichnises, welches weiterhin aufrufbar sein soll und somit als Ausnahme der allgemeingültigen Regel ausgeschlossen werden soll.
RedirectMatch 301 ^/(?!subdir).* https://www.deine-domain.tld
Mit dieser Zeile wird alles auf die entsprechende Domain umgeleitet, bis auf das Unterverzeichnis mit dem Namen "subdir"
Umleitung der URL von HTTP auf HTTPS
Umleitung der URL von HTTP auf HTTPS
Wer für seine Homepage ein SSL Zertifikat nutzt, hat die Möglichkeit, seine Domain per .htaccess-Befehl auf den verschlüsselten HTTPS-aufruf umzuleiten.
# Aktiviere HTTPS
RewriteEngine ON
RewriteCond %{Server-Port} !=443
RewriteRule ^(.*)$ https://deine-domain.tld$1 [R=301, L}
Redirect auf ein Unterverzeichnis
Redirect auf ein Unterverzeichnis
Redirect /index.php https://www.deine-domain.tld/Unterverzeichnis
Weiterleitung aller Dateien eines Verzeichnisses, auf eine andere Datei, bis auf eine Ausnahme
Weiterleitung aller Dateien eines Verzeichnisses, auf eine andere Datei, bis auf eine Ausnahme
In diesem Beispiel wird die die Weiterleitung aller Dateien des Verzeichnisses /waren/ auf /waren.php durchgeführt, außer /waren/aktion.php
RewriteEngine ON
RewriteRule ^waren/aktion.html [L,R=301]
RewriteRule ^waren(.*)$ /waren.php [L,R=301]
Weiterleitung einer dynamischen URL auf eine statische URL
Weiterleitung einer dynamischen URL auf eine statische URL
Weiterleitung von http://deine-domain.tld/ware.jsp?id=(.*) /neueste-angebote.html
RewriteEngine ON
RewriteRule ^ware.jsp?id=(.*)$ /neueste-angebote.html [L,R=301]
301 Redirekt von www auf non-WWW
301 Redirect von WWW auf non-WWW
Redirect von http://www.deine-domain.tld auf http://deine-domain.tld mit folgenden 3 Befehlszeilen:
RewriteEngine ON
RewriteCond %{HTTP_HOST} ^www\.deine-domain\.tld$ [NC]
RewriteRule ^(.*)$ http://deine-domain\.tld/$1 [L,R=301]
oder
RewriteEngine ON
RewriteCond %{HTTP_HOST} ^www\.deine-domain\.tld$ [NC]
RewriteRule ^(.*) http://deine-domain\.tld/$1 [L,R=301]
301 Redirect von non-WWW auf WWW
301 Redirect von non-WWW auf WWW
Redirect von http://deine-domain.tld auf http://www.deine-domain.tld mit folgenden 3 Befehlszeilen:
RewriteEngine ON
RewriteCond %{HTTP_HOST} !^www\.deine-domain\.tld$ [NC]
RewriteRule ^(.*)$ http://www.deine-domain\.tld/$1 [L,R=301]
oder
RewriteEngine ON
RewriteCond %{HTTP_HOST} ^deine-domain\.tld$ [NC]
RewriteRule ^(.*) http://www.deine-domain.tld/$1 [L,R=301]
oder sogar allgemeingültige 301 Weiterleitung, falls mehrere Domains auf den Ordner zugreifen:
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*) https://www.%{HTTP_HOST}/$1 [R=301,L]
Manuelle 301 Weiterleitung einrichten per htaccess
Manuelle 301 Weiterleitung einrichten per htaccess
RedirectPermanent /screenshot https://deine-domain.tld/wissen/screenshot
RedirectPermanent /dateiformate https://deine-domain.tld/wissen/dateiformate
Umschreiben einer dynamischen URL auf eine statische URL (interne Weiterleitung)
Umschreiben deiner dynamischen URL auf eine statische URL (interne Weiterleitung)
Ruft man die URL /irgendwas.html auf, wird intern /index.php ausgeführt und ausgegeben. Der Server gibt dabei den Statuscode 200 (OK) aus und mach keine 301 oder 302 Weiterleitung. In der Adresszeile steht aber immer noch /irgendwas.html. Das Umschreiben ist somit nach außen nicht erkennbar.
RewriteRule ^irgendwas.html$ index.php [L]
Redirect Dateipfad
Redirect Dateipfad
Redirect /Verzeichnisname/dateiname.html http://www.deine-domain.tld/Anderesverzeichnis/dateiname.html
Änderungen an einer Dateiendung
Änderungen an einer Dateiendung
Wenn man z.B. dauerhaft die Dateiendung ändern will (z.B. von HTML auf PHP
RedirectMatch 301 (.*)\.html$ http://www.deine-domain.tld$1.php
Festlegen einer Standardseite
Festlegen einer Standardseite
Um die Standardseite beim Laden zu änderen
DirectoryIndex index.php
Domain auf eine Seite leiten
Domain auf eine Seite leiten
Bestimmte Domains oder Subdomains sollen entweder mit oder ohne www auf eine bestimmte Unterseite weitergeleitet werden. Dies ist nützlich, wenn man mehrere Domains bzw. Subdomains auf einem Webspace betreibt und sich diese jeweils in einem Unterordner z.B. Ordner 1 für Domain, Ordner 2 für Subdomain usw... auf dem Webspace befinden.
Je nachdem wie die Domain aufgebaut ist gibt es drei Möglichkeiten:
# mit realurl/simulatestatic und .htm Suffix:
RewriteCond %{HTTP_HOST} ^(www\.)?deine-domain\.tld
RewriteRule ^$ /unterseite.htm
oder
# mit realurl ohne .html Suffix:
RewriteCond %{HTTP_HOST} ^(www\.)?deine-domain\.tld
RewriteRule ^$ /unterseite/
oder
#ohne realurl:
RewriteCond %{HTTP_HOST} ^(www\.)?deine-domain\.tld
RewriteRule ^$ /index.php?id=62
Hotlinking von Bildern verhindern
Hotlinking von Bildern verhindern
# Verhindere Hotlinking
RewriteEngine ON
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://deine-domain/.*$ [NC] [OR]
RewriteCond %{HTTP_REFERER} !^http://www.deine-domain/.*$ [NC] [OR]
RewriteRule .*\.(gif|GIF|jpg|JPG|bmp|BMP|wav|MP3|wmv|avi|mpeg)$ - [F]
Zeitzone des Webservers ändern
Zeitzone des Webservers ändern
# Zeitzone festlegen
SetEnv TZ Europe/Berlin
IP-Adressen blockieren
IP-Adressen blockieren
# Bereich zum Regeln von IP-Bereichen
Order deny.allow
Deny from .aol.com
Allow from 192.168.220.102
PHP Memory Limit erhöhen
PHP Memory Limit erhöhen
# PHP Memory Limit
php-value memory_limit 128M
PHP Uploadlimit und Skriptlaufzeit anheben
PHP Uploadlimit und Skriplaufzeit anheben
Läuft PHP als Apache Modul, so lassen sich Änderungen an den PHP Einstellungen über die .htaccess vornehmen.
<FilesMatch (.*).php>
#steht für das Limit in Megabyte des kompletten Uploads
php_value post_max_size "100M"
#Das Limit einer Datei
php_value upload_max_filesize "50M"
#Gibt den verfügbaren RAM für das PHP Skript vor, was vor allem bei der Bildweiterverarbeitung wichtig ist (imagecopyresampled)
php_value memory_limit "512M"
#Gibt die maximale Ausführdauer eines Skriptes in Sekunden vor
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 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/ihredomain/php.log
php_value error_reporting 4595
php_value log_errors_max_len 0
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
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>
Datei Zugriff über den Browser aktivieren
Datei Zugriff über den Browser aktivieren
# Zeige Verzeichnisinhalt an
Options +Indexes
Zeichensatz für Dokumente festlegen
Zeichensatz für Dokumente festlegen
# Zeichencodierung festlegen
AddDefaultCharset utf-8
oder
# Zeichencodierung für bestimmte Dateien festlegen
AddDefaultCharset utf-8 .css .htm .html .xhtml .php
Trailing Slash an jeden Ordner automatisch anhängen
Trailing Slash an jeden Ordner automatisch anhängen
macht deine-domain.tld/verzeichnis zu deien-domain.tld/verzeichnis/
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ https://www.deine-domain.tld/$1/ [L,R=301]
404 Dokument einbinden
404 Dokument einbinden
ErrorDocument 404 https://www.deine-domain.tld/404/
Manuelle URL-Korrektur per RewriteRule
Manuelle URL-Korrektur per RewriteRule
RewriteRule ^news/$ https://www.deine-domain.tld/aktuelles/ [R=permanent,L]
oder auch für dynamische Links
RewriteRule ^aktuelles/$ index.php?seite=aktuelles
Einzelne Seite automatisch auf SSL umleiten
Einzelne Seiten automatisch auf SSL umleiten
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]^/content/kontakt.html$
Automatisches Verzeichnislistin / Dateiauflistung deaktivieren
Automatisches Verzeichnislisting / Dateiauflistung deaktivieren
Options -multiviews
Serverseitige Korrektur von Tippfehlern deaktivieren
Serverseitige Korrektur von Tippfehlern deaktivieren
CheckSpelling Off
HTML-Aufruf in Query Strin umwandeln
HTML -Aufruf in Query String umwandeln
Aus suche_unterkunft_wien.htm wird search.php?city=wien&q=unterkunft&perpage=25
RewriteRule suche_(.*)_(.*).htm$ /search.php?city=$1&q=$2&perpage=25
Quellen:
Jörgs Webnotizen - Reihenfolge von Modrewrite-Rules, Gumzo.de - Wie mod_rewrite wirklich arbeitet. Anleitung für Fortgeschrittene, forum.modrewrite.de, www.modrewrite.de, Uni-Hamburg, Suchmaschinenoptimieurng, wiki.selfhtml.org mod_rewrite, Tutorial reguläe Ausdrücke von Daniel Fett, https://jweiland.net/know-how/internet/htaccess-konfigurieren.html,