`wget`-ting um site para navegação "local" em um domínio diferente

`wget`-ting um site para navegação "local" em um domínio diferente

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

O espelho NÃO DEVE ser um espelho real, mas DEVE ser uma cópia estática, por exemplo, um instantâneo do site em um horário específico, então acho wgetque 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 web com links absolutos, mesmo quando os links apontam para recursos internos. Por exemplo, uma página em https://example.com/page1conté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 posso mudar esse comportamento. wgetentão não converte esses links para navegação local, porque são absolutos (ou, pelo menos, acho que essa é a causa).

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

Posso wgetconverter esses links para o novo nome de domínio?

Responder1

Existe outra solução para o seu problema.

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

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

por exemplo :

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

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

Responder2

Isso poderia ser um problema de conteúdo misto ou relacionado ao uso dos protocolos HTTP e HTTPS?

Pode ser que você esteja fazendo o espelhamento 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"/>

A conversão do link é a última fase do seu comando e deve mostrar linhas com informações detalhadas sobre o processo de conversão. Este é apenas um exemplo de espelhamento de uma página usando seu 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.

Somente no final o wget saberá o que foi baixado e converterá todos os links que conhece (deste histórico de downloads) com os caminhos relativos aos arquivos existentes. É possível que, embora o wget seja capaz de recuperar conteúdo usando HTTP, ele falhe com HTTPS.

Experimente isto:

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

Pode funcionar ou apresentar um erro que o ajude a resolver o problema real.

informação relacionada