Назад | Перейти на главную страницу

`wget`-ting веб-сайт для« локального »просмотра в другом домене

Мне нужно отразить веб-сайт и развернуть копию под другим доменным именем. Процедура зеркалирования должна быть полностью автоматической, чтобы я мог регулярно обновлять копию с помощью cron.

Зеркало НЕ ДОЛЖНО быть настоящим зеркалом, но оно ДОЛЖНО быть статической копией, например снимок сайта в определенное время, поэтому я думаю wget может подойти.

На данный момент я придумал следующий скрипт для получения копии исходного сайта:

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

Полученная копия затем предоставляется вам Nginx под новым доменным именем с простой конфигурацией для локального статического сайта, и, похоже, она работает.

Проблема в том, что исходный сервер создает веб-страницы с абсолютными ссылками на них, даже если ссылки указывают на внутренние ресурсы. Например. страница на https://example.com/page1 содержит

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

и так далее (это WordPress). Я никак не могу изменить это поведение. wget then не преобразует эти ссылки для локального просмотра, потому что они абсолютны (или, по крайней мере, я думаю, что это причина).

РЕДАКТИРОВАТЬ: настоящее доменное имя - assodigitale.it, хотя мне нужен скрипт, который работает независимо от конкретного домена, потому что он мне понадобится и для нескольких других доменов.

Могу я сделать wget преобразовать эти ссылки в новое доменное имя?

Есть еще одно решение вашей проблемы.

Вместо того, чтобы заставлять wget преобразовывать эти ссылки в новое доменное имя, вы можете заставить свой веб-сервер перезаписывать ссылки на лету.

с apache вы можете использовать mod_sed для перезаписи ссылок.

например:

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

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

Может ли это быть проблемой смешанного содержания или иным образом связано с использованием протоколов HTTP и HTTPS?

Возможно, вы делаете зеркало с помощью HTTP

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

в то время как указанные URL-адреса для преобразования являются абсолютными URL-адресами HTTPS:

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

Преобразование ссылки - это последний этап вашей команды, и он должен показать вам строки, дающие подробную информацию о процессе преобразования. Это всего лишь пример зеркального отображения одной страницы с помощью вашей команды:

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.

Только в конце wget узнает, что было загружено, и преобразует все известные ему ссылки (из этой истории загрузок) в относительные пути к существующим файлам. Возможно, что хотя wget может получать контент с помощью HTTP, он не работает с HTTPS.

Попробуй это:

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

Это может либо сработать, либо выдать ошибку, которая поможет вам в решении реальной проблемы.