`wget`-ting un sitio web para navegación "local" en un dominio diferente

`wget`-ting un sitio web para navegación "local" en un dominio diferente

Necesito reflejar un sitio web e implementar la copia con un nombre de dominio diferente. El procedimiento de duplicación debe ser totalmente automático, de modo que pueda actualizar la copia periódicamente con cron.

El espejo NO DEBE ser un espejo real, pero DEBE ser una copia estática, por ejemplo, una instantánea del sitio en un momento específico, por lo que creo que wgetpodría encajar.

A partir de ahora, se me ocurrió el siguiente script para obtener una copia del sitio original:

#!/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}"

Luego, Nginx le entrega la copia resultante con el nuevo nombre de dominio, con una configuración simple para un sitio estático local, y parece funcionar.

El problema es que el servidor de origen produce páginas web con enlaces absolutos, incluso cuando los enlaces apuntan a recursos internos. Por ejemplo, una página en https://example.com/page1contiene

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

y así sucesivamente (es WordPress). De ninguna manera puedo cambiar ese comportamiento. wgetluego no convierte esos enlaces para navegación local, porque son absolutos (o, al menos, creo que esa es la causa).

EDITAR: el nombre de dominio real es assodigitale.it, aunque necesito un script que funcione independientemente del dominio en particular, porque también lo necesitaré para algunos otros dominios.

¿Puedo wgetconvertir esos enlaces al nuevo nombre de dominio?

Respuesta1

Hay otra solución a tu problema.

En lugar de hacer que wget convierta esos enlaces al nuevo nombre de dominio, puede hacer que su servidor web reescriba los enlaces sobre la marcha.

con Apache, puedes usar mod_sed para reescribir enlaces.

p.ej :

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

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

Respuesta2

¿Podría ser esto un problema de contenido mixto o estar relacionado con el uso de protocolos HTTP y HTTPS?

Puede ser que estés haciendo el mirror usando HTTP

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

mientras que las URL mencionadas que se van a convertir son URL HTTPS absolutas:

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

La conversión del enlace es la última fase de su comando y debería mostrarle líneas que brindan información detallada sobre el proceso de conversión. Este es solo un ejemplo de cómo duplicar una página usando su comando:

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.

Sólo al final, wget sabrá lo que se ha descargado y convertirá todos los enlaces que conoce (de este historial de descargas) con las rutas relativas a los archivos existentes. Es posible que, si bien wget pueda recuperar contenido mediante HTTP, falle con HTTPS.

Prueba esto:

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

Podría funcionar o darte un error que te ayude a resolver el problema real.

información relacionada