Es gibt Fehler, die sich sofort zeigen, und es gibt Fehler, die auf ihren Anlass warten. Dieser hier wartete auf den Umzug.
Der Aufbau
Eine Weiterleitungsverwaltung kann auf zwei Wegen wirken. Der eine schreibt einen fertigen Regelblock, den man in die .htaccess übernimmt – ohne PHP, dafür bei jeder Anfrage mitgelesen. Der andere hängt sich in die Fehlerbehandlung: Findet der Server nichts, ruft er ein Skript auf, das nachsieht, ob für diese Adresse eine Regel hinterlegt ist.
Der zweite Weg ist der bessere, sobald es um mehr als eine Handvoll Regeln geht. Er kostet einen Aufruf – aber nur bei Adressen, die es ohnehin nicht gibt.
Woran er hängt
An zwei Zeilen in der .htaccess, und beide sind leicht zu übersehen:
Steht dort die gewöhnliche Fehlerseite, wird sie ausgeliefert und das Skript nie aufgerufen. Der Server verhält sich vollkommen korrekt – nur eben ohne die Weiterleitungen.
Sonst greift die interne Weiche zuerst und leitet den Aufruf auf eine erzeugte Seite um, die es nicht gibt. Das Skript ruft sich dann faktisch selbst nicht auf.
Das täuschende Fehlerbild
Die Verwaltungsoberfläche zeigt die importierten Regeln. Die Datenbank enthält sie. Die erzeugte Zuordnungsdatei enthält sie ebenfalls. Jede Kontrolle, die man üblicherweise anstellt, ist grün.
Die einzige Prüfung, die den Fehler zeigt, ist der Aufruf einer alten Adresse. Genau die ruft vor dem Umzug niemand auf – auf dem alten System funktioniert sie ja noch. Und nach dem Umzug ruft sie zuerst eine Suchmaschine auf, nicht der Betreiber.
Die Prüfung, die dazugehört
- Eine Adresse mit hinterlegter Weiterleitung
Erwartet wird der Status 301 und das richtige Ziel im Antwortkopf. Kommt 404, greift der Rückfall nicht.
- Eine Adresse, die entfallen soll
Erwartet wird 410. Kommt 404, ist die Regel zwar da, wird aber nicht gelesen – dasselbe Bild wie oben.
- Eine Adresse ohne Regel
Erwartet wird 404 mit der eigenen Fehlerseite. Kommt hier 200, ist die Fehlerbehandlung insgesamt falsch verdrahtet und meldet Erfolg, wo nichts gefunden wurde.
Der eigentliche Punkt
Das gilt über diesen Fall hinaus für alles, was über eine Fehlerbehandlung, einen Zeitplaner oder einen Auslöser angestoßen wird: Die Sichtprüfung der Daten sagt nichts darüber aus, ob der Weg dorthin überhaupt beschritten wird.