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 wget
que 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/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 posso mudar esse comportamento. wget
entã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 wget
converter 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"
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.