`wget`-ting einer Website für „lokales“ Surfen auf einer anderen Domain

`wget`-ting einer Website für „lokales“ Surfen auf einer anderen Domain

Ich muss eine Website spiegeln und die Kopie unter einem anderen Domänennamen bereitstellen. Der Spiegelungsvorgang sollte vollständig automatisch erfolgen, sodass ich die Kopie regelmäßig mit aktualisieren kann cron.

Der Spiegel DARF KEIN echter Spiegel sein, aber es MUSS eine statische Kopie sein, z. B. ein Schnappschuss der Site zu einem bestimmten Zeitpunkt, also denke ich, dass wgetes passen könnte.

Bis jetzt habe ich das folgende Skript entwickelt, um eine Kopie der Originalsite zu erhalten:

#!/bin/bash

DOMAIN="example.com"

cd /srv/mirrors
TMPDIR=$(mktemp -p . -d)
cd "${TMPDIR}"

wget -m -p -E --tries=10 --convert-links --retry-connrefused "${DOMAIN}"

cd ..
rm -rf oldcopy
mv "${DOMAIN}" oldcopy
mv "${TMPDIR}/${DOMAIN}" "${DOMAIN}"
rmdir "${TMPDIR}"

Die resultierende Kopie wird Ihnen dann von Nginx unter dem neuen Domänennamen mit einer einfachen Konfiguration für eine lokale statische Site zur Verfügung gestellt, und es scheint zu funktionieren.

Das Problem besteht darin, dass der Ursprungsserver Webseiten mit absoluten Links erstellt, selbst wenn die Links auf interne Ressourcen verweisen. Eine Seite unter https://example.com/page1enthält beispielsweise

<link rel="stylesheet" href="https://example.com/style.css">
<script src="https://example.com/ui.js"/>

und so weiter (es ist WordPress). Ich kann dieses Verhalten auf keinen Fall ändern. wgetDann werden diese Links nicht für das lokale Browsen konvertiert, weil sie absolut sind (oder zumindest glaube ich, dass das der Grund ist).

BEARBEITEN: Der tatsächliche Domänenname ist assodigitale.it, ich brauche jedoch ein Skript, das unabhängig von der jeweiligen Domäne funktioniert, da ich es auch für einige andere Domänen benötige.

Kann ich wgetdiese Links in den neuen Domänennamen konvertieren?

Antwort1

Es gibt eine andere Lösung für Ihr Problem.

Anstatt wget diese Links in den neuen Domänennamen konvertieren zu lassen, können Sie Ihren Webserver veranlassen, die Links im laufenden Betrieb neu zu schreiben.

Mit Apache können Sie mod_sed verwenden, um Links neu zu schreiben.

z.B :

AddOutputFilter Sed html OutputSed "s/example.com/neuedomain.com/g"

https://httpd.apache.org/docs/trunk/mod/mod_sed.html

Antwort2

Könnte dies ein Problem mit gemischten Inhalten sein oder anderweitig mit der Verwendung der Protokolle HTTP und HTTPS zusammenhängen?

Es kann sein, dass Sie den Spiegel über HTTP erstellen

DOMAIN="example.com"
wget -m -p -E --tries=10 --convert-links --retry-connrefused "${DOMAIN}"

wobei es sich bei den genannten zu konvertierenden URLs um absolute HTTPS-URLs handelt:

<link rel="stylesheet" href="https://example.com/style.css">
<script src="https://example.com/ui.js"/>

Die Linkkonvertierung ist die letzte Phase Ihres Befehls und sollte Ihnen Zeilen anzeigen, die detaillierte Informationen zum Konvertierungsprozess geben. Dies ist nur ein Beispiel für die Spiegelung einer Seite mithilfe Ihres Befehls:

Downloaded: 177 files, 12M in 0.2s (51.0 MB/s)
Converting links in example.com/index.html... 45-2
...
Converted links in 15 files in 0.008 seconds.

Erst am Ende weiß wget, was heruntergeladen wurde, und konvertiert alle ihm bekannten Links (aus diesem Downloadverlauf) mit den relativen Pfaden zu den vorhandenen Dateien. Es ist möglich, dass wget zwar Inhalte über HTTP abrufen kann, dies bei HTTPS jedoch fehlschlägt.

Versuche dies:

DOMAIN="example.com"
wget -m -p -E --tries=10 --convert-links --retry-connrefused https://"${DOMAIN}"

Es funktioniert möglicherweise oder gibt einen Fehler aus, der Ihnen bei der Lösung des eigentlichen Problems hilft.

verwandte Informationen