Die Regel war da, sie war richtig geschrieben, und sie tat auch etwas. Nur nicht das, was auf dem Zettel stand.

Der Aufbau

Eine .htaccess, die mehrere Auftritte auf einem Dokumentenstamm bedient, enthält früh eine Weiche: Sie erkennt den angefragten Hostnamen und schreibt die Anfrage intern auf das passende Verzeichnis um. Solche Umschreibungen enden fast immer mit dem Schalter L – der Durchlauf soll hier aufhören, die Zuordnung steht ja fest.

Weiter unten, im Abschnitt mit den Aufräumregeln, standen die beiden kanonischen Weiterleitungen: auf HTTPS und auf die www-Fassung. Dort stehen sie in vielen Konfigurationen, weil neue Regeln unten angehängt werden.

Was tatsächlich passiert

L beendet den Durchlauf – aber nicht die Bearbeitung. Wurde die Adresse verändert, beginnt Apache von vorn, mit der neuen, internen Adresse. Und in diesem zweiten Durchlauf erreicht die Anfrage endlich die kanonischen Regeln am Dateiende. Sie greifen dann auf einer Adresse, die es nach außen nie geben sollte.

Die entstehende Kette

Aufruf über http und ohne www:

http://domain/leistungen
https://www.domain/sites/_root/leistungen.html
/leistungen.html
/leistungen

Drei Sprünge, wo einer gereicht hätte. Und die zweite Station zeigt dem Besucher wie der Suchmaschine, wie die Verzeichnisse tatsächlich heißen.

Warum das lange unbemerkt bleibt

Weil das Ergebnis stimmt. Wer die Adresse im Browser eintippt, landet auf der richtigen Seite unter der richtigen Adresse. Die Kette dazwischen sieht niemand, der nicht danach sucht.

Auffällig wird es an anderer Stelle: in der Ladezeitmessung, wo drei Sprünge vor dem ersten Byte stehen. Oder wenn die interne Adresse in einem Bericht auftaucht und niemand erklären kann, wo sie herkommt.

Die Behebung

  1. Beide Regeln nach oben ziehen

    Unmittelbar hinter RewriteBase /, also vor jede interne Umschreibung. Dann greifen sie im ersten Durchlauf, auf der Adresse, die der Besucher tatsächlich angefragt hat.

  2. Beide Bedingungen in einer Regel prüfen

    Wer HTTPS und www in zwei getrennten Regeln behandelt, erzeugt bei einem Aufruf ohne beides zwangsläufig zwei Sprünge. Eine Regel, die den Zielhost vollständig zusammensetzt, kommt mit einem aus.

  3. Kette nachzählen

    Nach der Änderung den ungünstigsten Fall aufrufen – ohne HTTPS, ohne www, mit abschließendem Schrägstrich – und die Sprünge verfolgen. Ziel ist genau einer.

Die übertragbare Regel

Kanonische Weiterleitungen gehören an den Anfang, weil sie sich auf das beziehen, was angefragt wurde. Alles, was die Adresse verändert, gehört danach.

Das gilt unabhängig vom eingesetzten System. Sobald eine Konfiguration eine interne Umschreibung enthält, ist die Position der kanonischen Regeln keine Geschmacksfrage mehr, sondern entscheidet darüber, worauf sie angewendet werden.