Мне нужно сделать зеркало веб-сайта и развернуть копию под другим доменным именем. Процедура зеркалирования должна быть полностью автоматической, чтобы я мог регулярно обновлять копию с помощью 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
тогда не конвертирует эти ссылки для локального просмотра, потому что они абсолютные (или, по крайней мере, я думаю, что это причина).
EDIT: настоящее доменное имя — assodigitale.it, хотя мне нужен скрипт, который работает независимо от конкретного домена, поскольку он мне понадобится и для нескольких других доменов.
Могу ли я wget
преобразовать эти ссылки в новое доменное имя?
решение1
Есть и другое решение вашей проблемы.
Вместо того чтобы заставлять wget преобразовывать эти ссылки в новое доменное имя, вы можете заставить свой веб-сервер перезаписывать ссылки «на лету».
с Apache вы можете использовать mod_sed для перезаписи ссылок.
например:
AddOutputFilter Sed html OutputSed "s/example.com/newdomain.com/g"
решение2
Может ли это быть связано со смешанным содержимым или с использованием протоколов 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}"
Это может либо сработать, либо выдать ошибку, которая поможет вам решить реальную проблему.