問題描述

我正在開始一個新的 wordpress 博客,不再更新舊的 WordPress 博客。舊的一天仍然有 400-500 次點擊,所以我想保留檔案的目的,因為人們仍然鏈接到其職位。顯然有一個問題是 wordpress 和插件將被更新,我不想維護它。我如何鎖定 wordpress 的安裝,所以我不需要維護它?我看到有人建議製作一個靜態版本,這聽起來像是很多的工作。我想到的一個更合理的解決方案是在數據庫用户級別禁用對數據庫的寫入訪問。我從現在開始就禁止發表評論。

隨意分享任何想法或意見。

提前致謝。

最佳解決方案

使用像 WordPress 這樣的動態 CMS,沒有真正的方法來 「鎖定」 。隨着網絡的發展,以前未知的安全漏洞被發現並以新版本修補。實際上,除非您始終運行最新版本的 WordPress(目前為 3.0.4),否則您的網站在某種程度上是脆弱的。如果您不打算再次更新,創建一個靜態版本是最好最安全的選擇 – 而不是 「瘋狂的談話」 。

很可能是使用緩存 plug-in 並將緩存設置為永不過期。 plug-in 將根據需要自動創建您的頁面的靜態版本。您的鏈接仍然可以工作,人們將被引導到每個帖子和頁面的靜態 HTML 版本,而不是動態的數據庫生成。

通過生成靜態版本,您不需要擔心數據庫更新,WordPress 更新,plug-in 升級或新版本的主題。它成為 maintenance-free,但也是”frozen” 意義上的評論將無法工作,你不能添加新的內容… 這可能是很好的在這種情況下。

另一個選擇是保持動態,外包更新網站的任務。有人喜歡 WordPress.com 託管該網站,並將所有鏈接指向該版本的網站。託管服務 (特別是那個) 將始終擁有最新的安全補丁,而無需任何干預。

次佳解決方案

你好!我認為你的問題真的有用,因為它是一個非常有效和清晰的場景。

您的問題的範圍很重要:

  1. 禁用對數據庫的寫入訪問。

  2. 我從現在開始就禁止發表評論。

第二點對我的答案並不重要,因為您可以理解用户內容,因為”your” 內容可能。

只要您使用 mod_rewrite 來顯示博客 (Pretty Links 是 WordPress 世界中的 catch-phrase),您就有能力在完整的保留博客的同時進行快速整理。

我建議通過使用非常基本的 webhosting /php /static 技術來製作博客的靜態副本。它基本上是通過 webservers /HTTP 使用抽象的好處:瀏覽器不關心如果你再運行一個 web 應用程序 (這裏是 wordpress 博客),或者 webserver 只提供靜態頁面。

WordPress 已經在某種程度上被內置了。它都在 httpd.conf 或.htaccess 中的服務器級上工作:

網絡服務器檢查文件是否存在。如果是這樣,它將返回靜態文件。如果沒有,它會調用 wordpress 。如果你將這個與 wordpress .htaccess 的標準設置進行比較,可以很好的保持鏈接:

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

您可以看到它首先檢查了一個不存在的文件和目錄。現在想象,index.php 不會只返回所請求的位置內容,而是在這樣做的時候將內容保存為 file-system 中的一個文件,file-system 先前的檢查將返回 TRUE,因此,為了提供靜態文件而不是調用 webapplicaiton 。

所以魔法已經存在了。一旦存在,這是一個”cache”,永遠不會過期,直到你刪除靜態文件。

這個原則是一個很老的。有些人知道是”PHP way” 。第一個請求生成整個頁面,第二個請求甚至不再需要 mod_rewrite 。沒有我發明瞭,哦,我愛我的 this document by Ralf S. Engelschall dating back to December 1997,尋找 On-the-fly Content-Regeneration:

On-the-fly Content-Regeneration

Description:

Here comes a really esoteric feature: Dynamically generated but statically served pages, i.e. pages should be delivered as pure static pages (read from the filesystem and just passed through), but they have to be generated dynamically by the webserver if missing. This way you can have CGI-generated pages which are statically served unless one (or a cronjob) removes the static contents. Then the contents gets refreshed.

Solution:

This is done via the following ruleset:

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

Here a request to page.html leads to a internal run of a corresponding page.cgi if page.html is still missing or has filesize null. The trick here is that page.cgi is a usual CGI script which (additionally to its STDOUT) writes its output to the file page.html. Once it was run, the server sends out the data of page.html. When the webmaster wants to force a refresh the contents, he just removes page.html (usually done by a cronjob).

(引用來自鏈接的文檔,只是搜索它)

所以基本上用這種方法可以解決你的問題。如果您獲得 100%的 URL 覆蓋率,因此您生成的所有文檔,甚至可以關閉 mysqldb 。這是我的目標:一個完整​​的靜態版本的你的網站。這使得遷移到”archive” 服務器變得非常容易,所以一些只是服務和完成工作的服務器。

如何使用 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 是所謂的 front-end-controller,適用於大多數任何東西。

  2. 在前面添加一個 htmlCached::bootstrap(); 。這將做這個工作。工作如下:

    1. htmlCached 將啓用具有回調例程的輸出緩衝。

    2. 應用程序正常運行

    3. htmlCached 看到應用程序關閉的時候 (也就是説,當 wordpress 做了一切,這是一個非常愚蠢的應用程序,所以你可以做這些技巧)

    4. 在關機時,htmlCached 將服務器響應保存到磁盤 (將其發送到瀏覽器旁邊) 。

    5. 在下一個請求中,apache 將服務靜態內容。

所以這是很容易的。你需要用 wordpress 進行雙重檢查是 CSS 文件,JS 腳本和可能的圖像/文件 (多站點!) 。

如果你不運行多站點和複雜的緩存插件,你可能已經很好了。

檢查在您的網站的一生中請求哪些文件/URLS 。構建列表,請求所有文件一次。任務完成。

然後刪除所有.php 文件。

殺死數據庫。

你剛剛凍結你的網站。

如果您的鏈接結構沒有結束.html 為所有鏈接,我建議將所有文件保存為.html(.html 添加到請求),然後相應地配置.htaccess 文件。所以要檢查-f 的 REQUEST-URL + .html,如果不存在,要運行 htmlCached WP 實例 (將.html 添加到文件名中,如果還沒有在我的示例代碼中) 。

快樂實施。先備份 (像往常一樣) 。對於遷移的東西,您可以通過設置 MySQL 用户的相應權限來創建數據庫 read-only 。我會這樣做,所以你不需要急於實現這一點。例如。發現自 10 年以來已經請求的所有網址都可以進行查詢,可能需要一些時間。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。