問題描述
我正在開始一個新的 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 託管該網站,並將所有連結指向該版本的網站。託管服務 (特別是那個) 將始終擁有最新的安全補丁,而無需任何干預。
次佳解決方案
你好!我認為你的問題真的有用,因為它是一個非常有效和清晰的場景。
您的問題的範圍很重要:
-
停用對資料庫的寫入訪問。
-
我從現在開始就禁止發表評論。
第二點對我的答案並不重要,因為您可以理解使用者內容,因為”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 安裝),但基本上它有你需要的所有:
-
wp-config.php 是一個非常第一個入口點,您可以使用 index.php 進行更直接的處理。將類定義注入 index.php 。 Index.php 是所謂的 front-end-controller,適用於大多數任何東西。
-
在前面新增一個
htmlCached::bootstrap();。這將做這個工作。工作如下:-
htmlCached 將啟用具有回撥例程的輸出緩衝。
-
應用程式正常執行
-
htmlCached 看到應用程式關閉的時候 (也就是說,當 wordpress 做了一切,這是一個非常愚蠢的應用程式,所以你可以做這些技巧)
-
在關機時,htmlCached 將伺服器響應儲存到磁碟 (將其傳送到瀏覽器旁邊) 。
-
在下一個請求中,apache 將服務靜態內容。
-
所以這是很容易的。你需要用 wordpress 進行雙重檢查是 CSS 檔案,JS 指令碼和可能的影像/檔案 (多站點!) 。
如果你不執行多站點和複雜的快取外掛,你可能已經很好了。
檢查在您的網站的一生中請求哪些檔案/URLS 。構建列表,請求所有檔案一次。任務完成。
然後刪除所有.php 檔案。
殺死資料庫。
你剛剛凍結你的網站。
如果您的連結結構沒有結束.html 為所有連結,我建議將所有檔案儲存為.html(.html 新增到請求),然後相應地配置.htaccess 檔案。所以要檢查-f 的 REQUEST-URL + .html,如果不存在,要執行 htmlCached WP 例項 (將.html 新增到檔名中,如果還沒有在我的示例程式碼中) 。
快樂實施。先備份 (像往常一樣) 。對於遷移的東西,您可以透過設定 MySQL 使用者的相應許可權來建立資料庫 read-only 。我會這樣做,所以你不需要急於實現這一點。例如。發現自 10 年以來已經請求的所有網址都可以進行查詢,可能需要一些時間。
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。