別のドメインで「ローカル」ブラウジングするためにウェブサイトを `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これらのリンクは絶対リンクであるため、ローカル ブラウジング用に変換されません (少なくとも、それが原因だと思います)。

編集: 実際のドメイン名は assodigitale.it ですが、他のいくつかのドメインでも必要になるため、特定のドメインに関係なく機能するスクリプトが必要です。

wgetこれらのリンクを新しいドメイン名に変換できますか?

答え1

あなたの問題には別の解決策があります。

wget にそれらのリンクを新しいドメイン名に変換させる代わりに、Web サーバーにリンクをその場で書き換えさせることができます。

Apache では、mod_sed を使用してリンクを書き換えることができます。

例:

AddOutputFilter を html 出力に追加し、"s/example.com/newdomain.com/g" を出力します。

詳しくは、http://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"/>

リンク変換はコマンドの最後のフェーズであり、変換プロセスに関する詳細な情報を示す行が表示されます。これは、コマンドを使用して 1 つのページをミラーリングする例です。

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

動作するか、実際の問題の解決に役立つエラーが表示される可能性があります。

関連情報