'wget'-ting um site para navegação “local” em um domínio diferente

2

Eu preciso espelhar um site e implantar a cópia em um nome de domínio diferente. O procedimento de espelhamento deve ser todo automático, para que eu possa atualizar a cópia regularmente com cron .

O espelho NÃO DEVE ser um espelho real, mas DEVE ser cópia estática, por ex. um instantâneo do site em um momento específico, então acho que wget pode caber.

A partir de agora, criei o seguinte script para obter uma cópia do site 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}"

A cópia resultante é então trazida a você pelo Nginx sob o novo nome de domínio, com uma configuração simples para um site estático local, e parece funcionar.

O problema é que o servidor de origem produz páginas da web com links absolutos, mesmo quando os links apontam para recursos internos. Por exemplo. uma página em https://example.com/page1 contém

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

e assim por diante (é WordPress). De jeito nenhum eu posso mudar esse comportamento. wget então não converte esses links para navegação local, porque eles são absolutos (ou, pelo menos, eu acho que é a causa).

EDIT: o nome de domínio real é assodigitale.it, embora eu precise de um script que funcione independentemente do domínio em particular, porque também precisarei de alguns outros domínios.

Posso fazer com que wget converta esses links para o novo nome de domínio?

    
por Lucio Crusca 23.03.2018 / 07:49

2 respostas

0

Este pode ser um problema de conteúdo misto ou relacionado ao uso de HTTP & Protocolos HTTPS?

Pode ser que você esteja fazendo o espelho usando HTTP

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

enquanto os URLs mencionados a serem convertidos são URLs HTTPS absolutos:

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

Aconversãodelinkséaúltimafasedoseucomandoedevemostrarlinhasqueforneceminformaçõesdetalhadassobreoprocessodeconversão.Esteéapenasumexemplodeespelharumapáginausandoseucomando:

Downloaded:177files,12Min0.2s(51.0MB/s)Convertinglinksinexample.com/index.html...45-2...Convertedlinksin15filesin0.008seconds.

Somentenofinal,owgetsaberáoquefoibaixadoeconverterátodososlinksqueeleconhece(destehistóricodedownload)comoscaminhosrelativosaosarquivosexistentes.Épossívelque,emboraowgetconsigarecuperarconteúdousandoHTTP,elefalhacomHTTPS.

Tenteisto:

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

Pode funcionar ou dar-lhe um erro que o ajude a resolver o problema real.

    
por 23.03.2018 / 11:01
0

Existe outra solução para o seu problema.

Em vez de fazer com que o wget converta esses links para o novo nome de domínio, você pode fazer com que o seu servidor reescreva os links imediatamente.

com o apache, você pode usar o mod_sed para reescrever links.

por exemplo:

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

link

    
por 23.03.2018 / 11:36