我如何锁定我不打算更新的旧WordPress安装?

时间:2010-12-29 作者:Relequestual

我正在创建一个新的wordpress博客,不再更新旧的博客。旧版本每天仍有400-500次点击,所以我想保持它的存档,因为人们仍然链接到它的帖子。很明显,wordpress和插件会被更新,这是一个问题,我不想维护它。如何锁定wordpress的安装,以便不需要维护它?我看到有人建议制作一个静态版本,这听起来像是很多工作。我想到的一个更合理的解决方案是在数据库用户级别禁用对数据库的写访问。从现在起,我可以禁用评论。

请随时分享对此的任何想法或评论。

提前谢谢。

2 个回复
最合适的回答,由SO网友:EAMann 整理而成

对于像WordPress这样的动态CMS,没有真正的方法“锁定”随着网络的发展,以前未知的安全漏洞被发现并在新版本中修补。事实上,除非您总是运行最新版本的WordPress(目前为3.0.4),否则您的网站在某种程度上是易受攻击的。如果您不打算再次更新它,那么创建静态版本是最好和最安全的选择-not “疯狂的谈话。

很有可能使用缓存插件并将缓存设置为永不过期。插件将根据需要自动创建页面的静态版本。你的链接仍然有效,人们将被引导到每个帖子和页面的静态HTML版本,而不是动态的、数据库生成的版本。

通过生成静态版本,您无需担心数据库更新、WordPress更新、插件升级或主题的新版本。它变得免维护,但也“冻结”了,因为评论不起作用,你不能添加新内容。。。在这种情况下,这可能很好。

另一种选择是保持动态,并将更新站点的任务外包出去。找个像WordPress这样的人。com托管站点并将所有链接指向该版本的站点。托管服务(尤其是该服务)将始终具有最新的安全修补程序,而无需您的任何干预。

SO网友:hakre

你好!我认为你的问题很有用,因为它代表了一个非常有效和清晰的场景。

您的问题范围很重要:

禁用了对数据库的写入访问权限

只要你使用mod\\u rewrite来显示你的博客(在wordpress的世界里,漂亮的永久链接是流行语),你就有能力快速完成一步,同时保持你的博客完整。

我的建议是使用一种非常基本的webhost/php/static技术来创建博客的静态副本。它基本上利用了通过Web服务器/HTTP进行抽象的好处:浏览器不关心您是否继续运行Web应用程序(这里是wordpress博客),或者Web服务器只提供静态页面。

Wordpress已经以某种方式内置了此功能。所有这些都在httpd的服务器级别上工作。形态或。htaccess:

Web服务器检查文件是否存在。如果是,它将返回静态文件。如果没有,它将调用wordpress。如果将其与wordpress的标准设置进行比较。htaccess用于永久链接:

RewriteBase /blog/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
您可以看到,它首先检查了不存在的文件和目录。现在想象一下这个索引。php不仅会返回请求的位置内容,而且会在这样做时将内容保存为文件系统中的一个文件,之前的检查会返回TRUE,以便为静态文件提供服务,而不是调用WebApplication。

所以魔法已经存在了。一旦存在,这是一个“缓存”,在删除静态文件之前,它永远不会过期。

顺便说一下,这个原则很古老。有些人知道这是“PHP方式”。第一个请求生成整个页面,第二个请求可能不再需要mod\\u重写。我也没发明什么,哦,老兄,我爱死了this document by Ralf S. Engelschall dating back to December 1997, 寻找动态内容再生:

动态内容重新生成描述:

这里有一个非常深奥的功能:动态生成但静态服务的页面,即页面应作为纯静态页面(从文件系统读取并刚刚传递)交付,但如果缺失,则必须由Web服务器动态生成。通过这种方式,您可以获得静态服务的CGI生成的页面,除非其中一个(或cronjob)删除了静态内容。然后刷新内容。

解决方案:

这是通过以下规则集完成的:

 RewriteCond %{REQUEST_FILENAME}   !-s
 RewriteRule ^page\\.html$          page.cgi   [T=application/x-httpd-cgi,L]
这里有一个请求页面。html导致相应页面的内部运行。cgi if第页。html仍然丢失或文件大小为空。这里的诀窍就是那一页。cgi是一种常见的cgi脚本,它(除了标准输出之外)将输出写入文件页。html。一旦运行,服务器将发送页面的数据。html。当网站管理员想要强制刷新内容时,他只需删除页面。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安装),但基本上它具备了您所需要的一切:

wp配置。php是第一个入口点,可以破解索引。php提供了更直接的方法。将类定义注入索引。php。指数php是所谓的前端控制器,适用于大多数worpdresshtmlCached::bootstrap(); 在前面。这就行了。作业如下所示:HTMLCache将通过回调例程启用输出缓冲

  • 在关闭时,HTMLCache将服务器响应保存到磁盘(在将其发送到浏览器的旁边)

    如果您不运行多站点或复杂的缓存插件,那么您可能已经可以开始了。

    检查在站点的生存期内请求了哪些文件/URL。建立一个列表,请求所有文件一次。工作完成。

    然后全部删除。php文件。

    终止数据库。

    你刚刚冻结了你的网站。

    如果你的Permalink结构没有结束。对于所有链接,我建议将所有文件另存为。html(.html添加到请求中),然后配置。相应的htaccess文件。所以要检查REQUEST-URL+。的html-f 如果它不存在,则运行htmlCached WP实例(如果我的示例代码中还没有该实例,则还会将.html添加到文件名中)。

    执行愉快。先备份(像往常一样)。对于迁移内容,可以通过为MySQL用户设置相应的权限来使数据库只读。我会在两者之间这样做,所以您不需要急于实现这一点。E、 g.查找大约10年以来请求的所有URL可能会带来挑战,可能需要一些时间。

  • 结束

    相关推荐

    Updates for a private plugin?

    如果我写一个私有插件,有没有办法使用WordPress自动更新机制来更新它 我想封装这个功能,但它是我自己的5个博客特有的,所以它不是公共插件资源的好候选。但我喜欢这种简单的更新机制 有没有办法做到这一点