你好!我认为你的问题很有用,因为它代表了一个非常有效和清晰的场景。
您的问题范围很重要:
禁用了对数据库的写入访问权限从现在起,我可以禁用评论第二点对我的回答来说并不重要,因为你可能会把用户内容理解为“你的”内容。
只要你使用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是所谓的前端控制器,适用于大多数worpdress添加一个htmlCached::bootstrap();
在前面。这就行了。作业如下所示:HTMLCache将通过回调例程启用输出缓冲当应用程序关闭时,应用程序正常运行(也就是说,当wordpress做了所有事情时,它是一个非常愚蠢的应用程序,所以你可以做这些把戏)
在关闭时,HTMLCache将服务器响应保存到磁盘(在将其发送到浏览器的旁边)在下一个请求中,apache将提供静态内容因此,目前这很容易。您需要仔细检查wordpress的CSS文件、JS脚本,可能还有图像/文件(多站点!)。如果您不运行多站点或复杂的缓存插件,那么您可能已经可以开始了。
检查在站点的生存期内请求了哪些文件/URL。建立一个列表,请求所有文件一次。工作完成。
然后全部删除。php文件。
终止数据库。
你刚刚冻结了你的网站。
如果你的Permalink结构没有结束。对于所有链接,我建议将所有文件另存为。html(.html添加到请求中),然后配置。相应的htaccess文件。所以要检查REQUEST-URL+。的html-f
如果它不存在,则运行htmlCached WP实例(如果我的示例代码中还没有该实例,则还会将.html添加到文件名中)。
执行愉快。先备份(像往常一样)。对于迁移内容,可以通过为MySQL用户设置相应的权限来使数据库只读。我会在两者之间这样做,所以您不需要急于实现这一点。E、 g.查找大约10年以来请求的所有URL可能会带来挑战,可能需要一些时间。