Nein, meistens ist es nicht erforderlich, nach mod_rewrite zu suchen. Tatsächlich ist es oft vorzuziehen , diese Prüfung zu entfernen.
Wenn die Anweisungen mod_rewrite von Ihrer Site benötigt werden, sollten Sie sie nicht in einen <IfModule mod_rewrite.c>
Container einschließen. Denn wenn sie erforderlich sind und mod_rewrite nicht verfügbar ist, schlagen die Anweisungen einfach stillschweigend fehl und Ihre Site bricht weiterhin auf andere Weise ab (Maskierung der zugrunde liegenden Ursache) und legt möglicherweise etwas offen, das Sie nicht erwartet hatten. Ohne den <IfModule>
Wrapper würde die Site sofort (und vollständig) mit einem leicht identifizierbaren Fehler brechen und nichts Unerwartetes wird aufgedeckt.
Der <IfModule mod_rewrite.c>
Wrapper sollte nur verwendet werden, wenn :
- Die Site kann mit oder ohne mod_rewrite verwendet werden. Dies ist bei WordPress der Fall. Ohne mod_rewrite "funktioniert" die Site immer noch, Sie erhalten einfach nicht die "hübschen" URLs.
Oder
- Sie haben Anweisungen von einem anderen Modul , die davon abhängen, dass mod_rewrite erfolgreich ausgeführt wurde. In diesem Fall würden Sie diese anderen Anweisungen in einen
<IfModule mod_rewrite.c>
Wrapper einschließen. Beispiel: Festlegen eines HTTP-Antwortheaders (mit mod_headers) basierend auf einer Eigenschaft der Anforderung, die Sie mithilfe von mod_rewrite ermittelt haben. In diesem Fall können Sie die Headers
Direktive in einen <IfModule mod_rewrite.c>
Container einschließen.
Wenn Sie Ihren Server kennen, brauchen Sie die <IfModule mod_rewrite.c>
Prüfung meistens nicht , da Sie bereits wissen, ob mod_rewrite aktiviert ist oder nicht. Das einzige Mal, wenn Sie es brauchen, ist, wenn Sie tragbaren Code schreiben, um auf mehreren Servern zu arbeiten, und entweder die oben genannten Bedingungen 1 und / oder 2 erfüllt sind.
Manchmal erscheint dies sogar mehrmals in der Datei!
Und meistens ist dies völlig unnötig. Zur Verteidigung dieses Verhaltens tritt dies jedoch häufig auf, wenn Sie verschiedene Plugins haben, die .htaccess
automatisch und unabhängig voneinander bearbeitet werden. Gleiches gilt für mehrere RewriteEngine
und RewriteBase
Direktiven.
Für handgeschriebenen Code sollten Sie dies niemals sehen. Bei handgeschriebenem Code geschieht dies im Allgemeinen durch sinnloses Kopieren / Einfügen (was bei .htaccess
Direktiven leider häufig vorkommt ).
Gibt es einen Vorteil, wenn die <IfModule mod_rewrite.c>
fehlgeschlagenen RewriteRule-Anweisungen darunter liegen?
Nur im Fall von # 1 oder # 2 oben. Meistens nein.
mod_write ist jetzt so wichtig und allgegenwärtig, dass ich nicht mehr danach suche. Könnte dies zu einer Sicherheitslücke führen?
Wenn es für Ihre Site wichtig ist, müssen Sie nicht danach suchen. Keine Verwundbarkeit.
In der Tat könnte sogar das Gegenteil der Fall sein ... Wenn die Anweisungen mod_rewrite unbedingt erforderlich sind, kann die Überprüfung auf das Vorhandensein von mod_rewrite sogar zu weiteren Problemen führen, wenn mod_rewrite aus irgendeinem Grund plötzlich nicht mehr verfügbar ist. Wie oben erwähnt, würden Ihre mod_rewrite-Direktiven jetzt stillschweigend fehlschlagen (Stress "still" - kein Fehler), aber die Website funktioniert möglicherweise weiterhin, ohne dass ein Serverfehler ausgelöst wird, aber mit einer 200 Unsinn an den Benutzer (und Suchmaschinen-Bots) zurückgegeben wird OK Status. Wenn der <IfModule>
Wrapper weggelassen worden wäre, wären Sie sofort über das Problem informiert worden. Wenn dieser Fehler jedoch zum Schweigen gebracht wurde, kann es einige Zeit dauern, bis das Problem entdeckt wird. Zu diesem Zeitpunkt ist möglicherweise bereits ein schwerwiegenderer Schaden entstanden.