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

80 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 Browser** → `302`-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`**:
```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
```bash
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
```bash
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:
```bash
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.