htaccess RewriteRules wenn SSL-Zertifikat nur für eine Domain gilt

Das Problem hat sicher öfter noch wer. Stand heute vor dem Problem, dass ein Shop unter mehreren Domains erreichbar ist, das SSL-Zertifikat aber nur für die Hauptdomain gültig ist.

Erschwerend kam noch hinzu, dass die URL bereits am Anfang schon für SEO optimiert wurde und die Requests dementsprechend anders aussehen.

Folgende RewriteCond und RewriteRule’s haben mir dann schlussendlich doch den Erfolg gebracht

Options +FollowSymLinks
Options -Indexes 
RewriteEngine On
 
# hauptdomain.ch ausschliessen aus den Redirects (wegen Endlosschlaufe)
RewriteCond %{HTTP_HOST} !^www\.hauptdomain\.ch$
 
# Alle Requests der anderen Domains auf /de/shop/ umleiten
RewriteCond %{REQUEST_URI} ^/de/shop/$
RewriteRule ^([^!].*) https://www.hauptdomain.ch/de/shop/ [L,R=301]
 
# Alle Requests der anderen Domains auf /en/shop/ umleiten
RewriteCond %{REQUEST_URI} ^/en/shop/$
RewriteRule ^([^!].*) https://www.hauptdomain.ch/en/shop/ [L,R=301]

War eine Zangengeburt und vielleicht kann man es ja auch noch schöner machen, aber es funktioniert und es gibt wenigstens keine Fehlermeldungen mehr, das SSL-Zertifikat sei ungültig… ;-)

Rsync via SSH ohne Passwort

Ab und zu kommt es vor, dass man Dateien automatisiert (z. B. via Cronjob) über das Internet transferieren muss. Für diesen Fall bietet sich Rsync gerade zu an. Zum einen weil SSH hier wunderbar als Transport Layer verwendet werden kann (verschlüsselt) und weil es relativ schnell eingerichtet ist.

Hier also schnell eine kurze Erklärung wie man einen Datentransfer mit Rsync via SSH einrichtet, damit beim Transfer kein Passwort verwendet werden muss.

 

1. Schritt: Benutzer anlegen
Als erstes muss auf dem Quell- sowie dem Zielsystem ein Benutzer (z. B. transfer)  angelegt werden (dies erfolgt am besten mit dem Root-User) und für diesen Benutzer ein Passwort vergeben werden:

useradd transfer
passwd transfer

 

2. Schritt: Rsync-Installation auf Quell- und Zielsystem
Damit der Datentransfer funktioniert, muss Rsync auf beiden beteiligten Systemen installiert sein. Dies überprüft man am besten folgendermassen:

rsync --version

Wird anstelle einer Fehlermeldung die Versionsnummer ausgegeben, dann ist ein funktionsfähiges Rsync auf dem Rechner installiert.

Ist dies nicht der Fall, kann Rsync relativ einfach nachinstalliert werden (hier im Beispiel auf einem Ubuntu-Server):

sudo apt-get install rsync

 

3. Schritt: Erstellung eines passwortfreien RSA-Schlüssels
Damit man an den SSH RSA-Key des Benutzers kommt, der danach auf dem Zielsystem passwortfrei authentifiziert werden kann, muss man zwangsläufig einen RSA-Key erzeugen. Dazu meldet man sich zuerst mit dem neu erstellten Benutzer “transfer” am jeweiligen Server an.

Danach wird auf dem Quell- und dem Zielsystem ein .ssh-Verzeichnis im Home-Verzeichnis des Benutzers erstellt:

mkdir .ssh

Nun wechselt man auf dem Zielserver in das neu erstellte Verzeichnis und erstellt die RSA-Keys für den Benutzer “transfer”:

cd .ssh
ssh-keygen -t rsa -f transfer.identity

Die Frage nach der “Passphrase” quittiert man zweimal mit Enter, schliesslich wollen wir ja eine authentifizierte Verbindung ohne Passwort!

Nun wurden im .ssh-Verzeichnis zwei neue Dateien erstellt:
- transfer.identity (Private Key)
- transfer.identity.pub (Public Key – wird später verwendet)

 

Schritt 4: Den Public Key auf dem Quellsystem für den Benutzer “transfer” berechtigen
Nun holt man sich die erstellte Datei transfer.identity.pub vom Zielsystem auf den lokalen Rechner. Danach meldet man sich mit dem User “transfer” am Quellsystem an, wechselt ins .ssh-Verzeichnis und lädt die Datei “transfer.identity.pub” mittels SCP, FTP, o.ä. aufs Quellsystem ins Home-Verzeichnis des Benutzers transfer (/home/transfer/.ssh). Den Inhalt dieses Schlüssels berechtigt man folgendermassen:

cat /home/transfer/.ssh/transfer.identity.pub >> /home/transfer/.ssh/authorized_keys2

Achtung:
Auf beiden System muss das Verzeichnis .ssh dem Benutzer “transfer” gehören und die Verzeichnisrechte für diesen Benutzer folgendermassen gesetzt sein:
- zugänglich (“x”)
- lesbar (“r”)
- schreibbar (“w”)

 

Schritt 5: Passwortfreien Login vom Zielsystem aus testen
Wird bei diesem Schritt ein Passwort abgefragt, dann ist einer der vorherigen Schritte fehlgeschlagen oder es wurde ein Fehler gemacht. Eigentlich müsste hier der Quellserver eine Shell zurückgeben ohne nach einem Passwort zu fragen:

ssh -i /home/transfer/.ssh/transfer.identity QUELLSERVER

 

6. Rsync testen
Hier kann man testweise mal Files vom Quellserver auf den Zielserver laden. Dies geschieht z. B. mit folgendem Aufruf (wobei der Option -e der genaue SSH-Aufruf folgt über den verschlüsselt getunnelt wird):

rsync -e 'ssh -i /home/transfer/.ssh/transfer.identity'
-avz /var/www/html/meingewuenschterordner/ QUELLSERVER:/var/www/html/

Genaue Informationen über die Optionen von Rsync sind in den Manuals ersichtlich:

man rsync

Die Kaffee-Falle

Wer kennt das nicht?! Am Morgen um 05.30 Uhr verkündet der Radiowecker mit lautem Getöse, dass es doch vielleicht langsam Zeit wäre, sich aus den Federn zu erheben und in einen neuen Arbeitstag zu starten. Getreu dem Motto der bekannten Facebook Gruppe “Mein Wecker ist ein Ar***loch” wird er von mir am Morgen auch etwa 8 Mal konsequent ignoriert, bis es dann wirklich höchste Zeit ist, sich auch dem Bett zu schälen und ins Bad zu schlurfen. weiterlesen »

Become a Millionaire – Millionär über Nacht

Juhuuuu, endlich hab ich es geschafft. Ich bin Millionär geworden. Und das mit einem gaaanz offiziell bestätigten Formular, das mir heute per (Spam-)Mail ins Haus geflattert ist. Eigentlich müsste ich ja meinen Spamfilter wieder etwas weniger stark einstellen, vielleicht kommen dann noch 10 Gewinnbestätigungen nach. ;-)

Euros

weiterlesen »

Tip: Lily’s, Zürich

Heute habe ich mir am Mittag mal ein bisschen mehr Zeit genommen ein asiatisches Restaurant in Zürich getestet. Schliesslich möchte man sich zwischendurch ja mal was Gutes und Gesundes gönnen.

weiterlesen »