Die folgende Anforderung begegnet uns im Agenturalltag recht häufig: eine Website soll über einen geschlossen Mitgliederbereich verfügen, dort werden einige Dateien zum Download angeboten, die nur für diese Mitglieder zugänglich sein sollen.
Eine vollwertige Downloaderweiterung ist hier oftmals heillos überdimensioniert, ein simpler Link im Artikel oder ein Custom Field sind mehr als ausreichend – aber bei dieser Variante gibt es ein großes Problem: die entsprechende Datei kann, wenn der exakte Download-Link bekannt ist, auch ohne Login heruntergeladen werden!
Um dieses Problem zu umgehen, haben wir ein simples Skript zusammengezimmert, dass zusammen mit einer Ergänzung der .htaccess Datei dafür sorgt, dass bestimmte Ordner nur für eingeloggte Nutzer zugänglich sind. Praktisch dabei: diese Lösung erfordert keinerlei Anpassungen an den bisherigen Dateien oder Verlinkungen, sie kann problemlos in existierende Projekte eingebracht werden.
Teil 1: das PHP-Skript
Der erste Teil unserer Lösung ist ein simples PHP-Skript, dass:
- das Joomla-Framework lädt
- prüft, ob der Nutzer eingeloggt ist
- die entsprechende Datei aus der URL ausliest
- die Datei an den Browser ausgibt
Ist der Nutzer hingegen nicht eingeloggt, so wird ein 403 zurückgegeben.
Den Code des Skripts findet ihr bei Github! Es gibt eine Skript-Version für Joomla 3 und eine Skript-Version für Joomla 4
Teil 2: .htaccess Magie
Wie aber biegt man nun die Aufrufe auf unser Skript um? Hier kommen .htaccess Rewrite Rules ins Spiel! Mit diesen Regeln können wir alle Aufrufe auf einen bestimmten Ordner, im Beispiel /images/downloads auf das PHP-Skript readmedia.php weiterleiten:
RewriteRule ^images\/downloads\/.*$ readmedia.php [L]
Der Webserver übernimmt für uns hier also die harte Arbeit und unsere Joomla-Installation kann unverändert bleiben.