问题描述

我正在开始一个新的 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。