it-swarm.com.de

Apache .htaccess mod_rewrite: Verwendung von [NC]

Ich sehe Tonnen von .htaccess Beispielen, die das [NC] Flag enthalten (NoCase = Groß-/Kleinschreibung wird nicht berücksichtigt)

Beispielsweise verwendet die berühmte h5bp-Seite das [NC] -Flag häufig:
https://github.com/h5bp/server-configs-Apache/blob/master/dist/.htaccess

In fast jedem Beispiel steht das Flag [NC] am Ende der Direktive RewriteCond.
In der offiziellen Dokumentation ist jedoch eindeutig angegeben, dass sie nur für die RewriteRule -Richtlinie verwendet wird.

Sind 99% der Beispiele falsch?
Ist die offizielle Dokumentation falsch oder unvollständig?

4
Gregory MOUSSAT

In der offiziellen Dokumentation wird jedoch eindeutig angegeben, dass sie nur für die RewriteRule-Direktive verwendet wird.

Die Dokumente sagen nicht, dass sie nur für die Anweisung RewriteRule verwendet werden können. Auf der Seite, auf die Sie verlinken (die sich übrigens speziell mit den RewriteRule -Flaggen befasst), heißt es einfach:

Die Verwendung des [NC] -Flags bewirkt, dass die RewriteRule nicht zwischen Groß- und Kleinschreibung abgeglichen wird.

Die docs für die RewriteCond Direktive enthält einen Abschnitt über die Flags, die mit dieser Direktive verwendet werden können. Und dazu gehören NC, OR und NV. Das Flag NC ist beiden Anweisungen gemeinsam.

Wenn Sie in der Anweisung RewriteCond ein ungültiges Flag verwendet haben, wird ein 500 Internal Server-Fehler angezeigt. Und wenn Sie das Fehlerprotokoll des Servers überprüfen, sollten Sie etwas über "ungültige Flags" sehen.

Allerdings wird das NC -Flag im Allgemeinen zu oft verwendet (etwas abseits). Leute schließen es oft standardmäßig ein, wenn es wirklich nicht notwendig ist (oder schlimmer noch, Probleme verursachen wird).


UPDATE: Ich bin mir nicht sicher, ob das verknüpfte Dokument in den letzten Jahren aktualisiert wurde, aber es gibt nur 3 Fälle von NC Flag, das mit der Anweisung RewriteCond verwendet wird. Die ersten 2 sind sicherlich gerechtfertigt, die 3. ist IMO umstritten.

#376   RewriteCond %{HTTP_Host} ^www\.(.+)$ [NC]

Beim Auflösen des Hostnamens (Wert des Headers Host) sollte dieser immer ohne Berücksichtigung der Groß- und Kleinschreibung (gemäß der HTTP-Spezifikation) verglichen werden. Alle Mainstream-Browser setzen bei der Anforderung den Header Host in Kleinbuchstaben. Andere Benutzeragenten (und Bots) können dies jedoch möglicherweise nicht. Standardmäßig vergleicht mod_rewrite dies natürlich unter Berücksichtigung der Groß- und Kleinschreibung. Das bedeutet nicht unbedingt, dass Sie immer das NC -Flag verwenden sollten, da dies genau davon abhängt, was Sie gerade tun.

Das Flag NC ist hier jedoch gerechtfertigt, da das Ziel dieser Regel darin besteht, die Unterdomäne www zu entfernen, unabhängig davon, ob dies www, wWw oder WWW ist. Ohne das Flag NC könnte ein (böswilliger) Benutzeragent WWW.EXAMPLE.COM senden und die kanonische Umleitung zum Domänen-Apex umgehen.

#408   RewriteCond %{HTTP_Host} !^www\. [NC]

Beachten Sie, dass dies ein negierter regulärer Ausdruck ist (gekennzeichnet durch das !-Präfix). Ziel dieser Regel ist es, von der Domänenspitze zur Unterdomäne www umzuleiten. Das NC -Flag ist hier berechtigt, da Sie die Umleitung verhindern möchten, wenn der Host -Header mit www oder WWW beginnt www.WWW.example.com.

#564   RewriteCond %{REQUEST_URI} "!(^|/)\.well-known/([^./]+./?)+$" [NC]

Die Verwendung des Flags NC ist hier umstritten. Das Ziel dieses Regelblocks ist es, den Zugriff auf Punktdateien und Verzeichnisse mit Ausnahme des Verzeichnisses .well-known zu blockieren. Bestenfalls ist es wahrscheinlich überflüssig, widerspricht jedoch ähnlichen Bedingungen, die früher in der Datei (Zeilen 345-7) verwendet wurden und die das NC -Flag nicht verwenden.

Das .well-known -Verzeichnis sollte immer in Kleinbuchstaben sein. Daher sollte das NC -Flag überflüssig sein. Indem wir jedoch das NC -Flag hier einfügen, werden Anforderungen der Form .WELL-KNOWN zugelassen (nicht blockiert) - die wahrscheinlich trotzdem fehlschlagen Wir arbeiten wahrscheinlich unter Linux, bei dem die Groß- und Kleinschreibung beachtet wird.

5
MrWhite