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

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

Мне нужно сделать зеркало веб-сайта и развернуть копию под другим доменным именем. Процедура зеркалирования должна быть полностью автоматической, чтобы я мог регулярно обновлять копию с помощью 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"

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

решение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}"

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

Связанный контент