web-dev-qa-db-ja.com

更新するつもりがない古いワードプレスのインストールをロックダウンするにはどうすればよいですか?

私は新しいワードプレスブログを始めています、そしてもはや古いものを更新しません。古いものはまだ1日に400-500のヒットを得ます、それで私は人々がまだその記事にリンクしているので、アーカイブ目的のためにそれを保ちたいです。明らかに、ワードプレスとプラグインが更新されるという問題があり、私はそれを維持したいとは思いません。維持する必要がないように、どうすればWordpressのインストールをロックダウンできますか?私は誰かが静的バージョンを作ることを提案するのを見ました。私が考えたより合理的な解決策は、データベースユーザーレベルでデータベースへの書き込みアクセスを無効にすることでした。これからコメントを無効にしても大丈夫です。

これについての考えやコメントを共有すること自由に感じなさい。

前もって感謝します。

6
Relequestual

WordPressのような動的なCMSでは、「ロックする」ための本当の方法はありません。 Webが進化するにつれて、これまで知られていなかったセキュリティホールが発見され、新しいバージョンで修正されます。実際には、常に最新バージョンのWordPress(現在は3.0.4)を実行しているのでなければ、あなたのサイトは何らかの形で脆弱です。二度と更新するつもりがないのであれば、静的バージョンを作成するのが最も安全で安全なオプションです - not "クレイジートーク。

強力な可能性は、キャッシングプラグインを使用し、キャッシュを無期限に設定することです。プラグインは、必要に応じて静的バージョンのページを自動的に作成します。あなたのリンクはまだうまくいくでしょう、そして人々は動的な、データベースによって生成されたものではなく、それぞれの記事とページの静的なHTMLバージョンに向けられるでしょう。

静的バージョンを生成することで、データベースの更新、WordPressの更新、プラグインのアップグレード、または新しいバージョンのテーマについて心配する必要がなくなります。これはメンテナンスフリーになりますが、コメントが機能せず、新しいコンテンツを追加できないという意味でも「凍結」されます。この場合はおそらく問題ありません。

別の方法は、物事を動的に保ち、あなたのサイトを更新するタスクを外部委託することです。 WordPress.comのような人にサイトをホストしてもらい、そのバージョンのサイトへのリンクをすべて指定します。ホスト型サービス(特にそのサービス)には、ユーザーの介入なしに常に最新のセキュリティパッチが適用されます。

4
EAMann

こんにちは!あなたの質問は非常に有効で明確なシナリオを表しているので、本当に役に立つと思います。

あなたの質問の範囲は重要です:

  1. データベースへの書き込みアクセスを無効にしました。
  2. これからコメントを無効にしても大丈夫です。

あなたがユーザーコンテンツを「あなたの」コンテンツと理解するかもしれないので、2番目の点は私の答えにとってそれほど重要ではありません。

あなたがブログを表示するためにmod_rewriteを使っている限り( Pretty Permalinks はワードプレスの世界ではキャッチフレーズです)あなたはあなたのを保持しながら素早く仕上げをする力を持っています。ブログいっぱい。

私が提案するのは、非常に基本的なウェブホスティング/ php/staticテクニックを使ってあなたのブログの静的コピーを作ることです。基本的にはWebサーバー/ HTTPを介した抽象化の利点を利用しています。ブラウザは、Webアプリケーションをもう実行していなくても(ここではwordpressのブログ)、Webサーバーが静的ページのみを提供しています。

Wordpressには、これがどういうわけか組み込まれています。これらはすべて、httpd.confまたは.htaccessのサーバーレベルで機能しています。

Webサーバーはファイルが存在するかどうかを確認します。もしそうなら、それは静的ファイルを返します。そうでなければ、代わりにwordpressを呼び出します。あなたがこれをかなりパーマリンクのためのwordpress .htaccessの標準設定と比較すると:

RewriteBase /blog/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]

まず、存在しないファイルとディレクトリがチェックされていることがわかります。 index.phpが要求された位置のコンテンツを返すだけでなく、その間にコンテンツをファイルシステムにファイルとして保存し、その代わりに前のチェックでTRUEが返されていたことを想像してください。 webapplicaitonを呼び出すことの。

それで、魔法は既にあります。いったん存在すると、これは静的ファイルを削除するまで期限切れにならない「キャッシュ」です。

ちなみにこの原則は非常に古いものです。それは一部の人から "PHPのやり方"であることが知られています。最初のリクエストは全ページを生成し、2番目のリクエストはmod_rewriteを必要としなくなります。私が大好きだった 1997年12月にさかのぼるRalf S. Engelschallによるこの文書 、その場でのコンテンツ再生を探してください:

オンザフライのコンテンツ再生

説明:

動的に生成されるが静的に提供されるページ、つまりページは純粋な静的ページとして配信されるべきで(ファイルシステムから読み取られて通過されるだけ)、欠落している場合はWebサーバーによって動的に生成される必要があります。こうすれば、静的コンテンツを削除しない限り、静的に提供されるCGI生成のページを持つことができます。その後、内容が更新されます。

溶液:

これは以下のルールセットを介して行われます。

 RewriteCond %{REQUEST_FILENAME}   !-s
 RewriteRule ^page\.html$          page.cgi   [T=application/x-httpd-cgi,L]

ここで、page.htmlがまだ見つからないか、ファイルサイズがnullの場合、page.htmlへのリクエストによって、対応するpage.cgiが内部的に実行されます。ここでのトリックは、page.cgiが(さらにそのSTDOUTにも)その出力をファイルpage.htmlに書き込む通常のCGIスクリプトであるということです。実行されると、サーバーはpage.htmlのデータを送信します。ウェブマスターがコンテンツを強制的に更新したい場合、彼は単にpage.htmlを削除します(通常はcronjobによって行われます)。

(リンクされた文書から引用し、それを検索してください)

だから基本的にこのアプローチであなたはあなたの問題を解決することができます。 100%のURLカバレッジが得られ、そのためにすべてのドキュメントが生成された場合は、mysqldbをシャットダウンすることもできます。これは私が目指すものです:あなたのウェブサイトの完全な、静的なバージョン。これにより、「アーカイブ」サーバーへの移行が非常に簡単になります。

Wordpressで静的にフリーズする方法は?

これはPHPベースのアプリケーションに基本的に "ディスクへの出力"を注入するコードのほんの一部です。あなたが合うと思うものは何でも自由に使ってください:

class htmlCached {
    static $instance;

    public static function bootstrap() {
        $file = $_SERVER['REQUEST_URI'];
        if ( '/' == substr($file, -1)) {
            $file .= 'index.html';
        }
        $self = dirname($_SERVER['PHP_SELF']).'/';

        if ($self != substr($file, 0, strlen($self))) {
            return;
        }

        $local = substr($file, strlen($self));

        // var_dump($file, $local, $self, $_SERVER);
        self::$instance = new htmlCached($local);
    }

    private $_file = '';
    public function __construct($file) {
        $this->_file = $file;
        ob_start(array($this, 'callback'));
    }
    public function callback($buffer) {
        $file = $this->_file;
        file_put_contents($file, $buffer);
        chmod($file, 0644);  // octal; correct value of mode
        return $buffer;
    }
}

あなたは(これはwordpressのインストールからではないので)wordpressのために少し採用するためにこれを必要とするかもしれませんが、基本的にそれはあなたが必要とするすべてを持っています:

  1. wp-config.phpは非常に最初のエントリーポイントです、あなたは同様にもっと直接的なアプローチのためにindex.phpをハックすることができます。クラス定義をindex.phpに挿入します。 Index.phpはほとんどすべてのworpdressのためのいわゆるフロントエンドコントローラです。
  2. 前にhtmlCached::bootstrap();を追加してください。これは仕事をするでしょう。仕事は次のとおりです。
    1. htmlCachedは、コールバックルーチンによる出力バッファリングを有効にします。
    2. アプリケーションは通常通りに実行されます。
    3. htmlCachedは、アプリケーションがシャットダウンしたときに表示されます(つまり、wordpressがすべてを実行したときは、かなり愚かなアプリケーションなので、これらのトリックを実行できます)。
    4. シャットダウン時に、htmlCachedはサーバーの応答をディスクに保存します(ブラウザに送信する次に)。
    5. 次のリクエストで、Apacheは静的コンテンツを提供します。

だから今のところこれは簡単です。ワードプレスで再確認する必要があるのは、CSSファイル、JSスクリプト、そしておそらく画像/ファイル(マルチサイト)です。

あなたがマルチサイトも複雑なキャッシングプラグインも実行していないのなら、もう行ってもいいかもしれません。

サイトの有効期間中にどのファイル/ URLが要求されたかを確認してください。リストを作成し、一度すべてのファイルを要求します。仕事は終わった。

その後、すべての.phpファイルを削除します。

データベースを強制終了します。

あなたはただあなたのサイトをフリーズしました。

あなたのパーマリンク構造がすべてのリンクに対して.htmlで終わっていない場合は、すべてのファイルを.htmlとして保存し(.htmlをリクエストに追加して)、それに応じて.htaccessファイルを設定することをお勧めします。そのため、REQUEST-URL + .htmlで-fをチェックし、それが存在しない場合は、htmlCached WPインスタンスを実行します。 ).

ハッピー実施。最初にバックアップします(通常どおり)。移行の場合は、MySQLユーザーに対応する権限を設定してデータベースを読み取り専用にすることができます。私はその間にそれをするでしょう、それであなたはこれを実行するために急ぐ必要はありません。例えば。 10年ほど前から要求されているすべてのURLについて調べるのは難しい場合があり、時間がかかる場合があります。

6
hakre