Einspielen, Livegang, Testbetrieb und Marketing
Fachpapier zu Stufe 9f: warum eine hochgeladene Seite »403 Forbidden« zeigt, wie die Einspielhilfe das findet und behebt, wie der Testbetrieb abläuft, welche Server-Teile vorbereitet sind und wie das Marketing-Paket rechtssicher eingesetzt wird
Kennung TRAIN-PROV0001-P34 · Fassung 0.7 · Stand 14.10.2026
Verfasser: Thomas Schüller · office@sport-trainer.at
Kurzfassung
Nach dem ersten Hochladen zeigte sport-trainer.at »403 Forbidden«. Der Fehler sagt nur, dass der Server die Auslieferung verweigert, nicht warum (RFC 9110, Abschnitt 15.5.4). Bei einer statischen Seite auf cPanel mit Options -Indexes ist die häufigste Ursache schlicht: im Stammverzeichnis der Domain liegt keine index.html — weil der Inhalt eine Ordnerebene zu tief entpackt wurde, weil er im falschen Ordner liegt oder weil das ZIP noch nicht entpackt ist. Der Server darf dann kein Verzeichnis auflisten und antwortet mit 403 (Apache 2.4, core, Options, DirectoryIndex).
Ab Fassung 0.19 liegt deshalb neben dem Hochladeordner eine Einspielhilfe (einspielen.php): eine einzelne Datei, die mit einem Schlüssel aufgerufen wird, den Befund zeigt, das ZIP an der richtigen Stelle entpackt, eine zu tiefe Ebene hochzieht, Rechte richtet und sich danach selbst löscht. Dazu kommen ein kürzerer HSTS-Wert im Testbetrieb, vorbereitete Server-Teile für später und ein Marketing-Paket.
1 Ursachen für 403 auf cPanel
| Ursache | Erkennbar an | Abhilfe |
|---|---|---|
Inhalt eine Ebene zu tief (…/sport-trainer.at/HOMEPAGE/index.html) |
Stammverzeichnis enthält nur einen Ordner | Einspielhilfe »Hochziehen« |
| ZIP hochgeladen, aber nicht entpackt | nur die ZIP-Datei im Ordner | Einspielhilfe »Entpacken« |
Falscher Ordner: Domain zeigt auf sport-trainer.at/, Inhalt liegt in public_html/ |
Einspielhilfe meldet Seitenstand im Nachbarordner | ZIP in den Domainordner laden oder Stammverzeichnis unter »Domains« ändern |
| Rechte zu eng (Dateien 600, Ordner 700) | Tabelle »Dateirechte« abweichend | Einspielhilfe »Rechte richten« (644/755) |
Übergeordnete .htaccess mit Require all denied |
Zeile »Übergeordnete .htaccess mit Sperre« | Anweisung dort auf den eigenen Ordner begrenzen |
| Sicherheitsfilter des Hosters (ModSecurity) | 403 nur bei bestimmten Adressen | im cPanel prüfen, beim Hoster nachfragen |
Nicht 403, aber beim Livegang ebenso häufig: 500 bei einer Anweisung, die der Server in .htaccess nicht erlaubt (zum Test .htaccess kurz umbenennen), und ein Zertifikatsfehler, wenn die Umleitung auf https greift, bevor AutoSSL das Zertifikat ausgestellt hat.
2 Einspielhilfe
Aufruf: einspielen.php und TRAININGSWERK_HOMEPAGE_v….zip in den Domainordner laden, dann im Browser sport-trainer.at/einspielen.php?s= mit dem Schlüssel aus EINSPIELEN.md aufrufen. Wer die Einspielhilfe nicht aufrufen kann (404 statt der Seite), hat sie in einen Ordner gelegt, auf den die Domain nicht zeigt — das ist selbst schon der Befund.
Was sie tut:
- Befund: fehlende Pflichtdateien, Seitenstand in einem Unterordner oder Nachbarordner, Rechte im Stammverzeichnis, Sperren und Sicherheitsrichtlinien in einer übergeordneten
.htaccess, vorhandene ZIP-Dateien, Inhalt des Stammverzeichnisses. - Entpacken: mit ZipArchive, sonst PharData. Liegt alles in einem Oberordner (etwa
HOMEPAGE/), wird dieser weggelassen. Pfade mit..oder absolute Pfade werden abgelehnt. - Hochziehen: verschiebt den Inhalt eines Unterordners ins Stammverzeichnis; Vorhandenes bleibt unangetastet, außer »überschreiben« wird gewählt.
- Rechte richten: Dateien 644, Ordner 755;
cgi-binund.well-knownbleiben unberührt. - Löschen: nach Bestätigung entfernt sie sich selbst und das ZIP.
Sicherheit: ohne Schlüssel antwortet sie mit 404; Aktionen nur per POST; keine Übertragung, keine Speicherung, nur Dateinamen und Rechte im eigenen Ordner; noindex. Sie gehört nicht auf den Server, wenn die Seite läuft.
Geprüft (Prüfung 28 und Handtest am 28.09.2026 mit PHP 8.4): ZIP ohne Oberordner, ZIP mit HOMEPAGE/, Seite eine Ebene zu tief, Seite im Nachbarordner, Rechte 600, Löschen ohne und mit Bestätigung, Pfad mit .., Aufruf ohne Schlüssel.
3 Livegang in sieben Schritten
- Domain im cPanel mit eigenem Stammverzeichnis anlegen; AutoSSL abwarten.
- Postfach office@sport-trainer.at anlegen; Telefon im Impressum prüfen.
einspielen.phpund das HOMEPAGE-ZIP in den Domainordner laden.- Einspielhilfe aufrufen, »Entpacken«, Befund grün.
/systemcheck.htmlaufrufen: Skripte, Sicherheitsrichtlinie, Rechenkern.- Abnahme nach
ABNAHME_TESTBETRIEB.md(103 Punkte). - Einspielhilfe löschen.
4 Testbetrieb
| Einstellung | Testbetrieb | Nach Freischaltung |
|---|---|---|
robots.txt |
Disallow: / |
Freigabe mit Sitemap |
Kopfzeile X-Robots-Tag |
noindex, nofollow |
entfällt |
| HSTS | ein Tag | ein Jahr |
| Band auf jeder Seite | Testbetrieb mit Grenzen | entfällt |
| Shop, Vermittlung | Beispiele, keine Verkäufe, keine Provision | nach Vertrag mit Anbietern |
Der kurze HSTS-Wert verhindert, dass ein Zertifikatsfehler in der Einrichtungsphase die Domain für ein Jahr im Browser sperrt. Die Umstellung erfolgt über plattform.json, betrieb.
5 Server-Teile: vorbereitet, nicht aktiv
Die Seite braucht keinen Server. Für später liegen in 02_INTERN/server/ Formularschlüssel, Anfrage (Partner, Anfrage an einen Anbieter, Frage) und Rücktrittsfunktion nach § 13a FAGG bereit, übernommen aus dem Ernährungsverbund. Sie sind datensparsam (kein Motivprofil, keine Gesundheitsangaben), löschen Anfragen nach 180 Tagen (Art. 5 Abs. 1 lit. e DSGVO), halten die Konfiguration außerhalb des Webordners und antworten mit 503, solange sie nicht ausdrücklich aktiviert sind.
Seit Fassung 0.22 ist ein Bereich »Direkt senden« für die Seiten Rückmeldung und Partner werden gebaut. Er wird mit dem Schalter direktversand.aktiv in plattform.json eingebaut, ist dann zunächst verborgen, fragt beim Laden einen Formularschlüssel ab und erscheint nur, wenn der Server antwortet (schrittweise Erweiterung: sonst bleibt der Weg über das Mailprogramm). Im Testbetrieb ist der Schalter aus; die Seite sendet dann keine Anfrage an den Server. Die Datenschutzerklärung beschreibt den Direktversand. Ende-zu-Ende geprüft mit PHP 8.4 und Chromium.
6 Marketing-Paket
Das Paket in 01_EXTERN/marketing/ enthält Flyer (A5), Partnerinformation (A4), Pressetext und Texte für soziale Medien. Regeln:
- Kennzeichnung: Werbung ist als solche erkennbar; der Anbieter ist genannt (§ 6 ECG).
- Keine unerbetenen E-Mails: Werbung per E-Mail nur mit vorheriger Einwilligung (§ 174 TKG 2021); Partner werden persönlich oder über Verbände angesprochen.
- Keine Heil- oder Gewichtsversprechen, keine Kalorien, keine Vorher-nachher-Bilder.
- Vergleich ehrlich: Beispiele sind als Beispiele gekennzeichnet; »beste« oder »günstigste« nur mit nachprüfbarer Grundlage (UWG).
- Impressum auf gedruckten Stücken: Name und Anschrift von Medieninhaber und Hersteller sowie Verlags- und Herstellungsort (§ 24 MedienG); die Druckerei wird vor dem Druck eingesetzt. UID und GISA-Zahl stehen nur im Impressum der Seite.
- Markentrennung: keine anderen Bereiche des Unternehmens im Werbetext außer in der Offenlegung.
7 Browserprüfung des ganzen Auftritts
Ein statischer Auftritt mit 25 Werkzeugen und über 80 Seiten lässt sich nicht verlässlich von Hand durchklicken. Ab Fassung 0.20 prüft 05_BUILD/auftritt_testen.py vor jeder Auslieferung in Chromium, unter genau den Kopfzeilen, die die .htaccess beim Hoster setzt:
| Prüfpunkt | Maßstab |
|---|---|
| Erreichbarkeit | jede Seite ist von der Startseite aus über Verweise erreichbar |
| Verweise | jede interne Adresse und jedes Sprungziel existiert |
| Fehler | keine Konsolen- und Skriptfehler, keine Verstöße gegen die Sicherheitsrichtlinie (W3C 2024) |
| Darstellung | kein seitliches Verschieben bei 1280 und 375 Pixel Breite |
| Zugänglichkeit | Sprache, Titel, Beschreibung, genau eine Hauptüberschrift, Bildbeschreibung, Feldbeschriftung (WCAG 2.1: 1.1.1, 2.4.2, 3.1.1, 3.3.2, 1.4.10) |
| Werkzeuge | jeder Knopf »Beispiel« läuft ohne Fehler |
| Austausch | Stand sichern, im selben Werkzeug und in der Trainingsmappe wieder laden |
| Fehlerseite | unbekannte Adresse ergibt 404 mit Fehlerseite |
Der erste Lauf fand 55 Befunde: fehlende Beschreibungen auf den Werkzeugseiten, fehlende Bildbeschreibungen in den Fachtexten und zwei Tabellen, die auf dem Telefon seitlich verschoben. Alle sind behoben; der Bericht der Fassung liegt in 04_META/pruefberichte/.
8 Hilfe und erste Schritte
Für den Testbetrieb ist entscheidend, dass Nutzende ohne Einweisung zurechtkommen. Die Seite Hilfe erklärt drei Schritte (Werkzeug öffnen, eintragen, als Datei sichern) und beantwortet vierzehn häufige Fragen zu Konto, Daten, Austauschdateien, Browser, Testbetrieb, Fehlermeldung und Partnerschaft. Die drei Schritte stehen auch auf der Startseite; Sportküche und Gerätekunde haben dafür einen Knopf »Beispiel« erhalten. Siehe 01_EXTERN/grafiken/erste-schritte.svg.
8a Betriebsbereitschaft (seit Fassung 0.30)
05_BUILD/bereitschaft_bauen.py fasst nach der Browserprüfung zusammen, ob die Fassung in Betrieb gehen kann, und schreibt 04_META/BETRIEBSBEREITSCHAFT.md. Die Ampel hat vier Bereiche:
| Bereich | bereit, wenn |
|---|---|
| Technik | Kopfzeilen der Sicherheitsrichtlinie vollständig, keine Verweise auf fremde Server, Zweckbestimmung auf jeder Seite, kein Browser-Speicher |
| Browserprüfung | Bericht dieser Fassung ohne Befunde |
| Rechtsseiten | Impressum, Datenschutz, AGB, Rücktritt, Barrierefreiheit, Offenlegung und Nutzung vorhanden; Impressum mit UID, GISA-Zahl, Behörde und E-Mail; keine Bank- oder Besteuerungsangaben |
| Betrieb | Einspielhilfe trägt diese Fassung und prüft den Schlüssel; Direktversand ausgewiesen |
Darunter ordnet der Bericht die offenen Punkte der Übergabe nach ihrem Ziel: Testbetrieb, öffentlicher Livegang, Verkauf und Abo, Freigabe einzelner Module, Weiterentwicklung. So ist auf einer Seite sichtbar, was technisch fertig ist und was bei Hoster, Anwalt, Fachleuten oder in eigener Entscheidung liegt. X-Frame-Options fehlt bewusst: frame-ancestors in der Sicherheitsrichtlinie erlaubt das Einbetten auf den eigenen Partnerseiten, X-Frame-Options würde es verhindern.
8b Sicherung aller Fassungen (seit Fassung 0.30)
Das Gesamtarchiv enthält alle Fassungen und muss unter 30 MiB bleiben. Bis Fassung 0.29 wuchs das Sammelarchiv der früheren Fassungen je Fassung um rund 1 MiB, vor allem durch das Fachbuch-PDF: Sein Inhalt ist im PDF komprimiert, deshalb findet xz die fast gleichen Texte aufeinanderfolgender Fassungen nicht. 05_BUILD/fassungen_packen.py ordnet die Dateien nach Endung, Pfad und Fassung, bringt PDF mit qpdf in eine unkomprimierte, inhaltsgleiche Form und packt mit 256 MiB Wörterbuch. Das Sammelarchiv der Fassungen 0.1 bis 0.29 schrumpft damit von 16 auf rund 5 MiB. Geprüft wird jede Datei: bytegleich, bei PDF gleicher Text und gleiche Seitenzahl bei bestandener Strukturprüfung. Die Einzelarchive je Fassung im eigenen 06_BACKUP bleiben bytegleich.
8c Betriebsunterlagen und Serverpaket (seit Fassung 0.34)
Für Testbetrieb und gewerblichen Verkauf liegen vier interne Unterlagen in 04_META/betrieb/, als Text und als PDF (erzeugt mit 05_BUILD/betrieb_bauen.py):
| Unterlage | Inhalt |
|---|---|
| Einrichtung der Server-Teile | acht Schritte vom Ordner der Domain bis zum geöffneten Shop, Selbsttest, Störungen |
| Betriebshandbuch | täglicher und wöchentlicher Ablauf, Bestellung und Rücktritt Schritt für Schritt, neue Fassung einspielen und zurücknehmen, Datenschutz- und Buchhaltungspflichten, Zuständigkeiten |
| Checkliste Verkaufsstart | fünf Freigaben, Einschalten, erste Woche |
| Verzeichnis der Verarbeitungstätigkeiten | sieben Tätigkeiten nach Art. 30 DSGVO mit Zweck, Rechtsgrundlage, Löschung und Schutz; Entwurf zur rechtlichen Durchsicht |
Das Serverpaket 06_BACKUP/TRAININGSWERK_SERVER_v…zip enthält die Schnittstelle, die Vorlagen des privaten Ordners, LIESMICH.md und die Einrichtung als PDF — nie eine ausgefüllte Konfiguration. Neu ist der Selbsttest api/status.php: Mit einem eigenen Schlüssel aus der Konfiguration zeigt er, ob PHP, Konfiguration, Geheimnis, Datenordner, Mailversand und Produktliste stimmen, ohne Personendaten und ohne Inhalte der Konfiguration; ohne oder mit falschem Schlüssel antwortet er wie eine fehlende Seite. Er läuft auch, solange die Server-Teile noch nicht aktiv sind, damit die Einrichtung Schritt für Schritt geprüft werden kann. Getestet mit dem eingebauten PHP-Server: 404 ohne und mit falschem Schlüssel, vollständige Liste mit richtigem Schlüssel.
8d Fahrplan und Regelwerk (seit Fassung 0.70)
Die Betriebsunterlagen sind um einen Fahrplan vom Testbetrieb zum Verkauf ergänzt (04_META/betrieb/FAHRPLAN_LIVEGANG.md, auch als PDF und im Bereitschaftsbericht gezählt). Er ordnet die verbleibenden Handgriffe und Entscheidungen in fünf Phasen — Testbetrieb, öffentlicher Livegang, Verkaufsstart, Bezahlen und Codes, laufender Betrieb — und nennt je Schritt die Unterlage und das Merkmal, an dem er erledigt ist. Ein Bestellweg ohne Zahlstelle (Bestellanfrage, Auftragsbuch, Rechnung) ist vollständig und bleibt bis zur Freigabe der Zahlstelle der Regelweg.
Prüfung 53 (Regelwerk) fasst die Regeln für veröffentlichte Inhalte in einem Durchgang über alle Ordner zusammen, die hochgeladen oder hinterlegt werden: keine Bank- und Steuerangaben, keine Zahlungsanbieter, keine Klickverfolgung, keine Namen anderer Stränge; Schießsport und Amateurfunk nur in ausschließenden Sätzen. Außerdem gleicht sie Zahlen ab, die an mehreren Stellen stehen (englische Oberflächen, Zahl der Prüfungen). Anlass waren mehrfach veraltete Zahlen, die bisher nur beim Lesen auffielen.
9 Prüfung
Prüfung 28 prüft: die Einspielhilfe ist syntaktisch fehlerfrei, verlangt den Schlüssel, der Schlüssel steht in EINSPIELEN.md; das HOMEPAGE-ZIP enthält index.html und .htaccess auf oberster Ebene, keine Unterordner-Wurzel, Rechte 644/755; die längste Zeile der .htaccess bleibt unter 8000 Zeichen; die Server-Teile sind fehlerfrei und standardmäßig inaktiv; das Marketing-Paket ist vollständig, nennt die Zweckbestimmung und enthält weder UID noch GISA-Zahl noch Serveradressen; der Bericht der Browserprüfung dieser Fassung liegt ohne Befunde vor; seit Fassung 0.30 liegt der Bericht zur Betriebsbereitschaft für diese Fassung mit allen Bereichen bereit vor, und die Gesamtsicherung packt und prüft das Sammelarchiv mit fassungen_packen.py; seit Fassung 0.34 liegen die vier Betriebsunterlagen als Text und aktuelles PDF auf dieser Fassung vor, ohne Bank- und Steuerangaben, der Selbsttest prüft den Schlüssel, antwortet sonst mit 404 und gibt weder Konfiguration noch Personendaten aus, und das Serverpaket enthält alle Dateien der Schnittstelle, aber keine ausgefüllte Konfiguration; seit Fassung 0.35 ist der Direktversand der Bestellanfrage im Shop nur eingebaut, wenn Verkauf und Direktversand beide freigegeben sind, und sendet genau die Felder, die bestellung.php liest.
10 Grenzen
- Die Einspielhilfe sieht nur den eigenen Ordner und dessen Eltern; Einstellungen des Hosters (ModSecurity, Serverkonfiguration) sieht sie nicht.
- Nginx-Hosting wertet
.htaccessnicht aus. - Rechtliche Durchsicht des Marketings vor dem ersten Druck.
- Der Direktversand setzt ein funktionierendes
mail()beim Hoster voraus; vor der Aktivierung mitmail_modusdateitesten.
Literatur
- Apache Software Foundation (2024): Apache HTTP Server Version 2.4 Documentation — core (Options, DirectoryIndex, AllowOverride) und mod_authz_core.
- Bundesgesetz, mit dem bestimmte rechtliche Aspekte des elektronischen Geschäfts- und Rechtsverkehrs geregelt werden (E-Commerce-Gesetz — ECG), BGBl. I Nr. 152/2001.
- Bundesgesetz gegen den unlauteren Wettbewerb 1984 (UWG), BGBl. Nr. 448/1984.
- Bundesgesetz über die Presse und andere publizistische Medien (Mediengesetz — MedienG), BGBl. Nr. 314/1981.
- Fielding, R.; Nottingham, M.; Reschke, J. (Hrsg.) (2022): HTTP Semantics. RFC 9110. doi:10.17487/RFC9110
- Fern- und Auswärtsgeschäfte-Gesetz (FAGG), BGBl. I Nr. 33/2014.
- Telekommunikationsgesetz 2021 (TKG 2021), BGBl. I Nr. 190/2021.
- Verordnung (EU) 2016/679 (Datenschutz-Grundverordnung).
- W3C (2018): Web Content Accessibility Guidelines (WCAG) 2.1. W3C Recommendation.
- W3C (2024): Content Security Policy Level 3. Working Draft.
Zweckbestimmung: Planung und Auswertung von Training bei gesunden Personen. Kein Medizinprodukt.
Ethik: Keine Arbeit für Rüstung, Militär, Waffen oder Dual-Use-Luftfahrt.
Offenlegung: Das Vorhaben gehört zu einem Einzelunternehmen mit weiteren gewerblichen Bereichen (siehe Offenlegung der Seite).
Rechte: Text alle Rechte vorbehalten. Werkzeuge und Datenschichten unter der Nutzungslizenz (bis 0.72 MIT), siehe Nutzung.