Files
Redirect/README.md
SimolZimol 13b72c2e8b new file: README.md
new file:   app.py
	new file:   config.json
	new file:   requirements.txt
2026-08-03 22:39:09 +02:00

2.6 KiB
Raw Permalink Blame History

Links Flask Redirect & Link-Preview-Server

Ein kleiner Flask-Webserver, der festgelegte Pfade auf externe URLs umleitet. Damit Social-Media-Plattformen (WhatsApp, Facebook, Twitter/X, LinkedIn …) eine korrekte Link-Preview der Zielseite anzeigen, bekommen Crawler eine HTML-Seite mit den kopierten Open-Graph-Metadaten der Original-Webseite.

Funktionsweise

  • Normale Browser302-Weiterleitung direkt zur Ziel-URL.
  • Social-Media-Crawler / Preview-Bots (anhand des User-Agents erkannt) → eine HTML-Seite mit den og:-Meta-Tags (Titel, Beschreibung, Bild) der Ziel-URL wird ausgeliefert. So funktionieren Previews mit deinem Pfad.

Die Metadaten werden live von der Zielseite geholt und zwischengespeichert (TTL standardmäßig 1 Stunde), um die Zielseite nicht zu überlasten.

Konfiguration

Alle Routen stehen in config.json:

{
  "routes": {
    "/cool": "https://youtube.net",
    "/github": "https://github.com"
  }
}

Einfach Paare aus Server-Pfad und Ziel-URL eintragen. Die Datei wird bei jeder Anfrage auf Änderungen geprüft kein Neustart nötig.

Eintrag Bedeutung
/cool https://deine-domain.de/cool
Wert Ziel-URL (z. B. https://youtube.net)

Umgebungsvariablen

Variable Standard Bedeutung
LINKS_CONFIG config.json Pfad zur Config-Datei
LINKS_CACHE_TTL 3600 Cache-Zeit für Metadaten (Sekunden)
LINKS_FETCH_TIMEOUT 10 Timeout beim Abrufen der Zielseite (Sek.)
PORT 5000 Port im lokalen Debug-Modus

Lokal starten

python -m venv .venv
.venv\Scripts\activate     # Windows
pip install -r requirements.txt
python app.py

Danach im Browser aufrufen: http://localhost:5000/cool

Mit Docker

docker build -t links .
docker run -p 8000:8000 \
  -v "$(pwd)/config.json:/app/config.json" \
  links

Der Server läuft dann unter http://localhost:8000 (Gunicorn, Port 8000).

Test der Preview

Um zu prüfen, ob ein Social-Crawler die Metadaten korrekt ausliefert:

curl -A "facebookexternalhit/1.1" http://localhost:5000/cool

Du solltest eine HTML-Seite mit og:title, og:description und og:image der Zielseite erhalten. Ohne diesen Header bekommst du die 302-Weiterleitung.