Werner: mod_substitute alle Inhalte ersetzen aber wie?

hi und guten Abend liebe Spezialisten, ich stehe mal wieder auf dem Schauch 😟

Mit mod_substitute kann der Inhalt einer Datei vor der Ausgabe gändert werden

Beispiel

AddOutputFilterByType SUBSTITUTE text/html text/javascript application/xhtml+xml+atom
Substitute "s|hallo|guten Tag|i"

ersetzt das hallo gegen guten Tag in der Datei

Ich möchte aber alle Inhalte der Seite, gegen einen neuen Inhalt austauschen. Da der Inhalt jedoch nicht bekannt ist, muss ich das mit regulären Ausdrücken machen .* funktioniert aber nicht

Substitute "s|.*|guten Tag|i"

wo ist mein Gedankenfehler ?

Danke Werner

  1. Hi,

    AddOutputFilterByType SUBSTITUTE text/html text/javascript application/xhtml+xml+atom
    Substitute "s|hallo|guten Tag|i"
    

    keine Backslashes vor den Pipes.

    Substitute "s\|.*\|guten Tag\|i"
    

    Backslashes vor den Pipes. Warum?

    In der Apache-Doku für mod_substitute sind keine Pipes …

    Wobei - wenn Du die gesamte Datei durch was anderes ersetzen willst - welchen Grund gibt es dann, die Datei nicht einfach durch die neue Datei zu ersetzen? Warum per Filter?

    cu,
    Andreas a/k/a MudGuard

    1. Tach!

      Substitute "s\|.*\|guten Tag\|i"
      

      Backslashes vor den Pipes. Warum?

      Die musst du dir wegdenken, die sind ein Editierunfall. Ich hatte sie eingefügt, weil das Forum sonst bei Pipes Tabellensyntax erkennt. Dann kam Matthias und hat die Zeile als Code markiert, woraufhin die Backslashes nun literal genommen wurden. Ich hab sie im OP wieder entfernt.

      dedlfix.

    2. hi MudGuard,

      die verwirrst mich jetzt^^ ich habe keine keine Backslashes vor den Pipes. Substitute "s|.*|guten Tag|i" außer dein Browser bastelt da \ rein ?

      Wie gesagt .* ersetzt leider nicht den Inhalt muss das anders maskiert werden ?

      Danke Werner

      1. hi,

        ich glaube nun was Ihr meint ? laut Doku muss man anstatt| / einfügen

        AddOutputFilterByType SUBSTITUTE text/html
        Substitute "s/example.com/expr=%{HTTP_HOST}/i"
        Substitute "s/Hello, (\S+)/expr=Hello from %{REQUEST_URI}, \$1/i"
        

        Aber leider funktioniert das auch nicht Substitute "s/.*/guten Tag/|i"

        Das jedoch funktioniert Substitute "s/hallo/guten Tag/|i"

        und bei dem apache.org Beispiel wird %{HTTP_HOST} nicht mit dem HTTP Host ersetzt, sondern %{HTTP_HOST} als Text ausgegeben.

        fehlt mir vielleicht ein Modul ?

        Danke Werner

        1. Tach!

          ich glaube nun was Ihr meint ?

          Glaub ich ich nicht. Matthias und ich haben in deinem Posting Änderungen vorgenommen, weil du die Syntaxregeln dieses Forums nicht beachtet hattest, und wir das korrigieren wollten. Dabei kam es dazu, dass ungewünschte Backslashes in deinem Posting sichtbar wurden. Wenn du Pipes-Zeichen verwendest, denkt das Forum, du möchtest Zellen einer Tabelle abtrennen und malt eine Tabelle drumherum. Du kannst das verhindern, indem du das Pipe-Zeichen mit \ maskierst oder indem du den Text-Teil als Code auszeichnest. Aber nicht beides, sonst kommt es zu dem Unfall, den wir produziert haben.

          laut Doku muss man anstatt | / einfügen

          Nee, muss man nicht, man kann aber, wenn man | als zu ersetzende Zeichen hat, dann kann man auf / als Trennzeichen umschalten.

          Aber leider funktioniert das auch nicht Substitute "s/.*/guten Tag/|i"

          Das jedoch funktioniert Substitute "s/hallo/guten Tag/|i"

          Entweder / oder |, aber nicht gemischt.

          Es steht in der Doku nicht dabei, ob man nur innerhalb einer Zeile ersetzen kann, oder beziehungsweise ob überhaupt man auch auf Mehrzeilenbetrieb umschalten kann oder muss. Eine Option dafür ist jedenfalls nicht gelistet. RegExp-Maschinen arbeiten per Default und ohne expliziten Parameter oftmals nicht über Zeilengrenzen hinweg. Es kann gut sein, dass diese Direktive nur für Inner-Zeilen-Ersetzungen vorgesehen ist. Eine Alternative wäre dann eher die Verwendung von RewriteRules, mit der du den Request auf ein leeres Ersatzdokument umschaltst. Oder auch ErrorDocument kann ich mir vorstellen.

          dedlfix.