다른 도메인에서 "로컬" 탐색을 위해 웹사이트 `wget`-ting

다른 도메인에서 "로컬" 탐색을 위해 웹사이트 `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그런 다음 해당 링크는 절대적이기 때문에 로컬 검색을 위해 변환하지 않습니다(또는 적어도 그것이 원인이라고 생각합니다).

편집: 실제 도메인 이름은 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은 절대 HTTPS URL입니다.

<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}"

작동할 수도 있고 실제 문제를 해결하는 데 도움이 되는 오류가 발생할 수도 있습니다.

관련 정보