Beiträge von Arne Drews

    Hier mal kurz das Pattern /<a href=\"([^"]+)\" target=\"_blank\">[^<]+<\/a>/igerklärt:

    / ... /ig

    Die beiden Slash sind sog. Delimiter, die einen RegEx-Pattern umschließen.

    Die Buchstaben i und g sind sog. Modifier. Über diese kann man das Verhalten der RegEx steuern.

    i bedeutet, dass mir Groß-/Kleinschreibung egal sind ( case insensitive ).

    g bedeutet, dass ich mehr als nur den ersten Treffer meine ( global ).

    Der Pattern-Ausdruck besteht also eigentlich nur aus dem, was zwischen den Delimitern steht:

    <a href=\"([^"]+)\" target=\"_blank\">[^<]+<\/a>

    Das kannst Du als ganz normale Zeichenkette betrachten, wobei bestimmte Zeichen durch einen Backslash maskiert werden müssen, damit diese korrekt interpretiert werden, hier zu sehen an den DoubleQuotes: \" oder auch dem Slash beim schließenden <\/a>-Tag.

    Ohne spezielle RegEx-Logik würde dort also völlig unspektakulär folgendes stehen:

    <a href="" target="_blank"></a>

    Damit würde er aber nichts finden, weil es so etwas im Dokument nicht gibt. Da kommen jetzt die regulären Ausdrücke zum Zuge, bspw. suchen wir ja alle <a>-Tags, mit beliebigem Text und href, die wir beide natürlich nicht exakt kennen.

    Das erledigt in dem Fall das [^<]+ für uns. Die eckigen Klammern stellen eine Zeichenklasse dar, nach der gesucht werden soll. Das Dach leitet an der Stelle eine Negation ein und bedeutet am Ende nur, dass an der Stelle alles stehen darf, außer ein <.

    Mit dem + hinter der Zeichenklasse definieren wir, dass mindestens eins bis beliebig viele Zeichen der Klasse gematched werden können.

    Das gleiche gilt für den href, in dem wir die URL des Link finden: ([^"]+).

    Hier verhält es sich genau wie zuvor, nur dass wir hier alle Zeichen außer einem DoubleQuote matchen wollen.

    Der wichtigste Unterschied ist die runde Klammerung. Über diese legen wir eine Backreference fest. Die erste Klammerung stellt die erste Backreference mit Index 1 dar.

    Auf diese Backreferences können wir in dem Replacement-String zugreifen, in dem wir den Index beginnend mit einem $ angeben: <span>$1</span>.

    Das ist die ganze Magie in Kürze erklärt, wenns hilft?

    Ansonsten: Tutorials büffeln

    :P

    Naja, an der Stelle findet er ja nichts, weil das DOM noch nicht komplett ist.

    Wenn Du es im Head einbindest, egal ob über <style> oder externer Datei, musst Du sowas benutzen:

    JavaScript
    document.addEventListener( 'DOMContentLoaded', function() {
    
        // ... hier kommt das Script rein
    
    });

    Die Parameter des replace sind einfach nur der RegEx-Pattern, also die Maske, nach der gesucht werden soll: /<a href=\"([^"]+)\" target=\"_blank\">[^<]+<\/a>/ig. RegEx ausführlich zu erklären wäre hier wohl zu viel Overhead ;)

    Der zweite Parameter ist die Zeichenkette, mit der das gefundene ersetzt werden soll, dabei steht das $1 für die erste Backreference, was in dem Fall der erste geklammerte Ausdruck in dem Pattern ist: ([^"]+). Ich habe dann nur ein <span> mit einer CSS-Klasse drum rum gebaut, damit Du das im Print-CSS entsprechend stylen kannst, wie Du magst.

    Ich hab nämlich probiert in Codepen (da hat es ja einwandfrei funktioniert) dein Skript so umzubauen, dass Dokumentenname + Link angezeigt werden, so brauch ich das dann nämlich im print.

    Kannst ja mal Deine Versuche zeigen, dann kann man bestimmt helfen, das umzubauen.

    Um das ganze nur für die Druckausgabe zu ersetzen, bietet sich übrigens folgende Logik an:

    So hast Du das Original-Dokument nach dem Druck wieder hergestellt.

    Kapselst Du das in die Events beforeprint und afterprint, benötigst Du für den Fall auch das obige DOMContentLoaded nicht.

    Ist das der ganze Inhalt der .htaccess?

    Wenn ja: Bitte folgendes versuchen

    Apache Configuration
    RewriteEngine On
    Redirect 301 ^(.*)\.htm$ https://granit.naturalstone.ch/$1
    Redirect 301 ^(.*)\.html$ https://granit.naturalstone.ch/$1

    Wenn nein: Bitte mal die ganze .htaccess posten.

    Sieht für mich so aus, als wenn er die .htaccess ignoriert, denn wer bleibt auf http://naturalstone.ch/Stelen-Palisaden.htm

    Leider würden wir gerne daran fest halten, dass "nur" die nicht gefundenen Seiten umgeleitet werden, nicht aber die bestehenden.

    Das ist aber eine andere Anforderung als das

    Darum wollen wir die aktuelle Seite von http://NaturalStone.ch und http://www.NaturalStone.ch nach http://granit.naturalstone.ch verschieben um auf http://NaturalStone.ch das neue WordPress Web aufzubauen.

    Damit ich das jetzt nicht falsch verstehe, kannst Du das evtl. nochmal klar definieren, was genau das Ziel sein soll?

    Ok, dann ist die Umsetzung so leider falsch :)

    Und daher kommt die Frage, ob ich das so mit der htaccess richtig gemacht habe. (meine Stärken liegen auf anderen Dingen). Meine Sorge ist, dass auch die jetzt neu am entstehend WordPress Seite "automatisch" auf http://granit.NaturalStone.ch umgeleitet wird.

    Genau das passiert auch...

    Ich würde dann anders an die Sache ran gehen. Erstellt doch die neue Seite unter einer Subdomain, dann kommt ihr euch nicht ins Gehege.

    Eine .htaccess benötigst Du dann auf der Hauptseite nicht mehr.

    Alternativ könnte man WP auch in einem Unterverzeichnis installieren und die neue Seite in Ruhe aufbauen, bspw. http://www.naturalstone.ch/rebuild/

    Diese ist erstmal unbekannt und ihr könnte in Ruhe arbeiten. Wenn ihr fertig seid, ändert ihr einfach das Home-Verzeichnis des vHost auf /rebuild/.

    Ob und wie das geht, hängt von eurem Provider respektive dem gebuchten Paket ab.

    Alles, was nicht dem HTTP_HOST http://naturalstone.ch entspricht, wird umgeleitet auf http://granit.naturalstone.ch/$1. Das $1 ist die URI.

    Wofür soll das eigentlich gut sein? Denn bei Aufruf von bspw. http://granit.naturalstone.ch/foobar.html würde aus meiner Sicht eine Dauerumleitung erfolgen.