WordPress 问题

WordPress升级错误: “正在执行例行维护,请一分钟后回来”

怎样解决访问WordPress前台后台一直显示 “正在执行例行维护,请一分钟后回来”?

错误描述:WordPress在后台进行版本、插件主题升级时,会先切换到维护模式,显示 “正在执行例行维护,请一分钟后回来(Briefly unavailable for scheduled maintenance. Check back in a minute)”,如果升级顺利就迅速恢复正常,给访客提供一个很好的体验。但有时升级途中因为某些原因中断,会一直停留在维护模式,访问前台后台都一直显示“正在执行例行维护,请一分钟后回来”。

错误原因:后台升级维护意外中断。

解决办法:

1. FTP登录,删除根目录下的 .maintenance ,即可。

2. 根目录没有 .maintenance的情况,新建一个空的txt文本,上传到FTP根目录,重命名为 .maintenance,即可。

3. 打开 /wp-admin/includes/class-wp-filesystem-direct.php

找到下面的代码:

function mkdir($path, $chmod = false, $chown = false, $chgrp = false) {
	// safe mode fails with a trailing slash under certain PHP versions.
	$path = untrailingslashit($path);
	if ( empty($path) )
		return false;

	if ( ! $chmod )
		$chmod = FS_CHMOD_DIR;
	if ( ! @mkdir($path) )
		return false;
	$this->chmod($path, $chmod);
	if ( $chown )
		$this->chown($path, $chown);
	if ( $chgrp )
		$this->chgrp($path, $chgrp);
	return true;
}

修改为:

function mkdir($path, $chmod = false, $chown = false, $chgrp = false) {
 // safe mode fails with a trailing slash under certain PHP versions.
 if ( ! $chmod )
 $chmod = $this->permission;

if(ini_get('safe_mode') && substr($path, -1) == '/')
 {
 $path = substr($path, 0, -1);
 }

if ( ! @mkdir($path) )
 return false;
 $this->chmod($path, $chmod);
 if ( $chown )
 $this->chown($path, $chown);
 if ( $chgrp )
 $this->chgrp($path, $chgrp);
 return true;
}

然后刷新FTP目录,删除 .maintenance 即可。

网站维护

Nginx判断accept_language禁止其他语言浏览器/操作系统访问

Http协议发送请求时会附加 accept_language,通过它可知道浏览器所支持的语言,一般也为操作系统默认的语言。
列举一些 accept_language 标识:

zh 中文
zh-cn 大陆
zh-tw 台湾
zh-hk 香港
en 英文

配置Nginx允许中文用户访问,拒绝其它语言用户访问。

if ( $http_accept_language ~* ^[^zh])
{
return 404; #非中文用户访问网站返回404
}

用Curl测试:

curl -I -H "Accept-Language:en"  www.getvm.com
HTTP/1.1 404 Not Found
Date: Wed, 20 Jun 2012 18:38:33 GMT
Content-Type: text/html
Content-Length: 169
Connection: keep-alive
网站维护

Apache/Httpd 安装 mod_pagespeed 加速模块

mod_pagespeed 是谷歌发布的加速httpd的优化模块,通过自动优化代码、压缩传输内容、自动缓存加速http,支持Centos/Debian系统。
Centos/Fedora下安装:

#http://www.getvm.com
#32位
wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_i386.rpm
#64位
wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_x86_64.rpm
yum install at
rpm -U mod-pagespeed-*.rpm

Debina/Ubuntu下安装:

#32位
wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_i386.deb
#64位
wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_x86_64.deb
dpkg -i mod-pagespeed-*.deb

重启httpd:

 

services httpd restart

 

查看pagespeed是否加载:

httpd -M|grep pagespeed
WordPress, WordPress 修改, 网站优化, 网站维护

.htaccess图片防盗链方法二则

统一在根目录下设置.htaccess达到图片防盗链的功能可以覆盖整个网站,.htaccess可以分布在不同的目录下,然后通过规则来达到整个网站相当复杂的功能,但是这也增加了网站出错的概念。

图片防盗链主要功能是减轻自己服务器的负担,同时保护自己的版权,然而问题也是不可避免的,譬如如果对Google防盗链,搜索引擎自然不会收录一张反馈为红叉的图片;对RSS防盗链,订阅用户会获得很差的用户体验,不定就取消订阅了

所以请谨慎考虑使用。

一、根目录设置.htaccess达到图片防盗链之效;

设置.htaccess禁止图片盗链,下面是禁止图片盗链的.htaccess设置部分

RewriteEngine on
RewriteCond %{REQUEST_URI} ^/(allow1|allow2)
RewriteRule ^.*$ – [L]

首先,设置允许可“盗链”即外部网站可以使用的文件所在的目录,上面我们设置了两目录,分别为allow1和allow2,当然,如果你只有一个目录的话,可以将其改为:

RewriteCond %{REQUEST_URI} ^/allow1

接下来判断是否为图片文件:

RewriteCond %{REQUEST_FILENAME} .(gif|jpeg|png)$ [NC]

你也可以根据自己的需要设置更多的文件类型:

RewriteCond %{HTTP_REFERER} !^$

上面这一行意在允许空“HTTP_REFERER”的访问,即允许用户在浏览器地址栏中直接输入图片地址的显示,一般而言,这是可以选的,不过建议这样设置,如果强迫必须具有“HTTP_REFERER”才能访问,可以回带来某些问题,不然说在用户通过代理访问时。

RewriteCond %{HTTP_REFERER} !taonice.cn [NC]
RewriteCond %{HTTP_REFERER} !google.com [NC]
RewriteCond %{HTTP_REFERER} !baidu.com [NC]

设置允许访问的HTTP来源,包括Google等,

RewriteRule (.*) /allow1/tzh.gif [R,NC,L]

将不满足上述条件的访问重定向到tzh.gif ,你可能已经注意到,tzh.gif位于允许“盗链”的目录allowq下,这一点很重要,不然,你的警告资讯图片将无法在对方网站上显示。

其它类型文件的防盗链设定,如果你您的网站上存在其它较大的文件,如flash、mp3被其他网站盗链,可以同样采取上述方法,比如说flash文档,可以类似如下的设置:

RewriteCond %{REQUEST_URI} ^/allow1
RewriteRule ^.*$ – [L]RewriteBase /
RewriteCond %{REQUEST_FILENAME} .swf$ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !taonice.cn [NC]

RewriteRule (.*) /allow1/tzh.swf [R,NC,L]

当然,需要事先先创建一个声明版权资讯的Flash文件“tzh.swf”,其它防止mp3文件、压缩文件盗链的设置与此类似,不再赘述。

二、图片目录设置.htaccess达到图片防盗链之效;

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !taonice.cn [NC]
RewriteCond %{HTTP_REFERER} !google.com [NC]
RewriteCond %{HTTP_REFERER} !baidu.com [NC]

RewriteRule .*.(gif|jpg)$ http://www.taonice.cn/no.png [R,NC,L]

简单的解释一下上述语句:

1、RewriteCond %{HTTP_REFERER} !^$ [NC]

允许空“HTTP_REFERER”的访问,即允许用户在浏览器地址栏中直接输入图片地址时图片文件的显示。一般而言,这是可选的,不过,建议这么设置,如果强迫必须具有“HTTP_REFERER”才能访问,可能会带来某些问题,比如说在用户通过代理服务器访问时。

2、RewriteCond %{HTTP_REFERER} !taonice.cn [NC]

设置允许访问的HTTP来源,包括我们的站点自身、Google、Baidu等。

3、RewriteRule .*.(gif|jpg)$ http://www.taonice.cn/no.png [R,NC,L]

定义被盗链时替代的图片,让所有盗链 jpg、gif、png 等文件的网页,显示根目录下的 no.png 文件。注意:替换显示的图片不要放在设置防盗链的目录中,并且该图片文件体积越小越好。当然你也可以不设置替换图片,而是使用下面的语句即可:

RewriteRule .*.(gif|jpg|png)$ – [F]

4、说明一下其中的R、NC 和 L

R 就是转向的意思

NC 指的是不区分大小写

L 的作用是指明本次转向到此结束,后续的转向不受先前判断语句的影响

5、防止盗链的文件类型

上例中是 gif、jpg、png,而根据需要,可更改或添加其他文件类型,如rar、mov等,不同文件扩展名间使用“|”分割。

这样的话,就可以基本做到简单的防止被盗链情况的发生,而且可以尽最大可能的减少服务器流量的无畏消耗。

WordPress, WordPress 问题

.htaccess文件为644权限不可修改

错误描述:在CPanel、DirectAdmin等后台或FTP修改.htaccess文件时候,显示文件权限为644,所有人为Apache,并且无法修改无法覆盖。

解决办法:

一、下载原目录下.htaccesss文件到本地;

二、删除服务器上.htaccess文件;

三、本地编辑好.htaccess文件直接FTP上传即可。

P.S.:

不小心误删除 .htaccess 文件的处理办法、WordPress 自动生成.htaccess 的办法:

前提:WordPress安装目录具有777完全读写权限。

方法:进入后台 >> 设置 >> 固定链接设置

如无需修改,则直接点击“保存更改”按钮,即可重新自动生成。

P.P.S.:

警告:网站根目录、程序主目录、WordPress 的 wp-content 目录具有完全读写权限777非常危险,严重威胁网站安全!请在修改完之后改回。

WordPress 问题

WordPress升级错误:class-wp-filesystem-direct.php on line 200

错误描述:WordPress在后台进行版本升级时,出错,之后进入前台或者后台,都无法访问进入,错误信息如下:

Warning: copy(/home/xxx/public_html/wordpress/wp-admin/menu.php) [function.copy]: failed to open stream: Permission denied in /home/xxx/public_html/wordpress/wp-admin/includes/class-wp-filesystem-direct.php on line 200

Warning: copy(/home/xxx/public_html/wordpress/wp-admin/menu.php) [function.copy]: failed to open stream: Permission denied in /home/xxx/public_html/wordpress/wp-admin/includes/class-wp-filesystem-direct.php on line 200

错误原因:FTP写入权限不够。

解决办法:

同《WordPress升级错误:class-wp-filesystem-direct.php on line 122

特别注意:请在自动升级完成之后修改wp-content文件夹权限回755,否则将影响程序安全。

呼喊世界

WordPress升级错误:class-wp-filesystem-direct.php on line 122

错误描述:WordPress在后台进行版本升级时,出错,之后进入前台或者后台,都无法访问进入,错误信息如下:

Warning: copy(/home/xxx/public_html/wordpress/wp-admin/menu.php) [function.copy]: failed to open stream: Permission denied in /home/xxx/public_html/wordpress/wp-admin/includes/class-wp-filesystem-direct.php on line 122

Warning: copy(/home/xxx/public_html/wordpress/wp-admin/menu.php) [function.copy]: failed to open stream: Permission denied in /home/xxx/public_html/wordpress/wp-admin/includes/class-wp-filesystem-direct.php on line 122

错误原因:FTP写入权限不够。

解决办法:

方法一:用FTP/SSH进入,赋予整个网站目录777完全读写权限。

方法二:用CPanel/DirectAdmin等管理平台进入文件管理,赋予整个网站目录777完全读写权限。

特别注意:请在自动升级完成之后修改wp-content文件夹权限回755,否则将影响程序安全。

WordPress, WordPress 问题

WordPress错误:wp-settings.php on line 137

错误描述:WordPress在后台进行版本升级时,出错,之后进入前台或者后台,都无法访问进入,错误信息如下:

Warning: require(/wp-includes/class-wp-embed.php) [function.require]: failed to open stream: No such file or directory in /wp-settings.php on line 137

Fatal error: require() [function.require]: Failed opening required ‘/wp-includes/class-wp-embed.php’ (include_path=’.:/usr/local/lib/php:/usr/local/php5/lib/pear’) in /wp-settings.php on line 137

解决办法:

一、通过FTP或者相关主机商提供的文件管理工具,进入到 wp-content/themes,找到现在正在使用主题的文件夹重命名文件夹,在原文件夹名称后加入“-old”(不包括引号)。尝试是否恢复,否,进入下一步。

二、通过FTP或者其他文件管理工具,或者phpMyAdmin,重新设定插件文件夹(wp-content/plugins),类似上步骤。尝试是否恢复,否,进入下一步。

三、

1. 备份数据库、备份原网站文件。

2. 进入WordPress官网,下载最新安装包。

3. 解压,上传覆盖原程序。

4. 在浏览器地址栏键入WordPress升级程序地址:http://你的网站地址/wp-admin/upgrade.php ,按照步骤升级。

5. 即可。