Apache Vhost
Einfacher 301 Redirect im Apache Vhost
<VirtualHost *:80> ServerName www.servername.com Redirect 301 / http://neuer-servername.com </VirtualHost>
.htaccess Datei
Einfacher Redirect innerhalb der .htaccess Datei
RewriteEngine On Redirect 301 / http://www.neue-domain.de
Rewrite innerhalb der .htaccess Datei
-> Alte Domain (mit und ohne www) nach neue Domain
RewriteEngine On RewriteCond %{HTTP_HOST} (www\.)?alte-domain.de RewriteRule (.*) http://www.neue-domain.de/$1 [R=301,L]
RewriteCond Query String
Arbeitet man mit URL Parametern und möchte anhand dieser eine RewriteRule greifen lassen, dann sieht es so aus, z.B. entfernen der jumpurl Funktion bei Typo3 mit anschließenden Umleiten auf die Startseite des Vhost
RewriteEngine On RewriteCond %{HTTP_HOST} (www\.)?domain-name\.de RewriteCond %{QUERY_STRING} jumpurl=(.*)$$ RewriteRule ^(.*)$ http://www.domainname/$1? [R=301,L]
Weiß man nicht, was alles in einen Query_String mitgeliefert wird, da man nur einen Beispielaufruf hat, dann kann man sich auf seinem Testserver eine PHP Datei anlegen mit dem folgenden Inhalt:
<?php echo $_SERVER['QUERY_STRING']; ?>
und als index.php auf den Server speichern und mit dem Aufruf ein wenig herumspielen.
Index.html aus URL entfernen
Es gibt Menschen, die haben Angst vor einer index.html innerhalb der URL, denen kann mit dem folgenden Eintrag innerhalb der .htaccess Datei geholfen werden
RewriteEngine On RewriteCond %{REQUEST_URI} ^(.*)/index.html(.*)$ RewriteRule ^(.*)$ %1%2 [R=301,NE,L]
Möchte ich, sobald jemand ein gelöschtest Bild in meiner Gallerie aufruft anstelle eines 404 Fehlers einen Platzhalter ausliefern, so habe ich dafür zwei Möglichkeiten (wahrscheinlich gibt es noch etliche mehr)
Einen externen Rewrite
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-l RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ http://www.mein-server/images/sorry.jpg
Einen internen Rewrite
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-l RewriteRule ^(.*)$ /images/sorry.jpg
Was machen die zwei Varianten
Externer Rewrite
-> Es verändert sich die URL, man sieht, daß das was man aufgerufen hat nicht da ist und das anstelle dessen etwas anderes geladen wurde.
-> Man kann je nach Protokoll 80 (HTTP) 443 (HTTPS) etwas anderes zurückgeben
-> Man ist darauf angewiesen, daß man dort, wo die RewriteRule zum Einsatz kommt auch unterscheiden kann, ob dort etwas auf Port 80 oder 443 ankommt.
Interner Rewrite
-> man muß nicht wissen auf welchen Port die Anfragen eintreffen.
-> Es verändert sich nicht die URL im Browserfenster, man sieht nicht, daß man eigentlich einen 404 Fehler produziert hat.
-> man kann nicht getrennten Inhalt für Port 80 oder 443 ausliefern.
Erklärung:
301 -> permanente Weiterleitung, der alte Aufruf in den Suchergebnissen soll dauerhaft durch den neuen ersetzt werden
302 -> temporäre Weiterleitung, der Aufruf soll nur vorübergehend gültig sein, der alte Aufruf wird nicht aus den Suchergebnissen gelöscht.
RewriteRule -> Was soll wohin umgeleitet werden.
RewriteCond -> Die Bedingung die erfüllt sein muß, damit die RewriteRule greift.
%{HTTP_HOST} -> Abgreifen des Domainnames für eine RewriteCond
%{QUERY_STRING} -> Abgreifen eines URL Parameters für eine RewriteCond
%{REQUEST_URI} -> Abgreifen eines Teils innerhalb der URL (nicht eines Parameters)
NC -> Ignoriere Groß-/Kleinschreibung
NE -> Kein „Escapen“ von Zeichen innerhalb der URL
QSA -> Übergebe den angefragten Query String der Anfrage unverändert an die neue Adresse RewriteRule
%{REQUEST_FILENAME} -> Überprüfen ob mit „-f“ ein File (Datei) existiert, mit „-d“ ein Verzeichnis existiert bzw. mit „-l“ ob ein Link existiert.