标签归档:rewrite

处理了lighttp上的wordpress用Jetpack的问题

嗯,以前用着用着都是没问题的,前几天看着评论栏直接无法访问了(蛋疼的防火墙),于是干脆关掉了,可是关掉之后发现好怀念那东西的网站统计啊……好想要回来啊,于是又重新启用,结果出问题了。

得到了这样的东西

Your Jetpack has a glitch. Something went wrong that’s never supposed to happen. Guess you’re just lucky: xml_rpc-32601

Try connecting again. Error Details: The Jetpack server could not communicate with your site’s XML-RPC URL. If you have the W3 Total Cache plugin installed, deactivate W3 Total Cache, try to Connect to WordPress.com again, reactivate W3 Total Cache, then clear W3 Total Cache’s cache.

卧槽,用的好好地怎么就突然出问题了呢?

经过啦大量的搜索,找到了解决的办法,原来是跟lighttpd的rewrite有关。

根据http://en.forums.wordpress.com/topic/jetpack-instl-issue-with-ssl-and-lighttpd(要求跨越防火墙),找到了解决的办法。
有一位有类似情况的人,将rewrite规则从

#Jetpack is broken with these rules
url.rewrite-once=(
 "^/(wp-.+).*/?" => "$0",
 "^/images/.*/?" => "$0",
 "^/temp/.*/?" => "$0",
 "^/(sitemap.xml)" => "$0",
 "^/(xmlrpc.php)" => "$0",
 "^/keyword/([A-Za-z_0-9\-]+)/?$" => "/index.php?keyword=$1",
 "^/.*?(\?.*)?$" => "/index.php$1"

改成了

#Jetpack works with these rules
url.rewrite-if-not-file = (
 "^/(wp-.+).*/?" => "$0",
 "^/images/.*/?" => "$0",
 "^/temp/.*/?" => "$0",
 "^/keyword/([A-Za-z_0-9\-]+)/?$" => "/index.php?keyword=$1",
 "^/.*?(\?.*)?$" => "/index.php$1"
 )

之后,Jetpack好了。我改成这样也没问题了。

在Apache中使用redirect

参考:

因为学校里面的论坛之前重装过,将文件夹挪过一下位置,导致以前的链接坏掉了。
今天刚说起这件事,于是稍微弄了一下。

这时候RedirectMatch就显得非常有用,如果你租用的虚拟主机是apache,那么恭喜你,你也可以使用目录下的.htaccess里设置 RedirectMatch。
语法: RedirectMatch [status] regex URL
regex 为 regular expressions 的缩写,具体参考 Apache 手册。
应用: 服务器配置, 虚拟主机, 目录, .htaccess文件
举例:
1) 将一个目录重定向到一个文件:
RedirectMatch 301 ^/lastdir$ /lastdir.html
2) 将A目录重定向到B目录:
RedirectMatch 301 ^/dir_a$ /dir_b
3) 将A目录下所有的文件重定向到B目录:
RedirectMatch 301 ^/dir_a/.* /dir_b
4) 将A目录下所有的文件重定向到B目录相对应的文件:
RedirectMatch 301 ^/dir_a/(.*) /dir_b/$1
$1表示上面圆括弧中的变量,如果有多个圆括弧,则按顺序为 $2,$3
5) 将A目录下所有的文件重定向到B服务器的C目录相对应的文件:
RedirectMatch 301 ^/dir_a/(.*) 
这个对有些原先使用个人空间,而现在有了自己的服务器或者虚拟主机的人来说非常有用,
比如原先是 www.wz.zj.cn/~mypage
而现在有了www.myweb.com 这个空间
那么就可以在原个人空间的目录下编辑 .htaccess 加入:
RedirectMatch 301 ^/~dir_a/(.*) 
如果域名发生变更,可以这样:
RedirectMatch 301 ^(.*) 
说明:
符号 ^ 表示匹配项的开始, 符号 $ 表示结束,符号 * 代表通配符,符号 () 定义变量,$1, $2 为变量名。
301,是状态码,表示永久重定向,另外还有:
302,临时重定向,如果不写状态码,则这个就是默认值。
303,系统会有一个页面,指出资源地址已经改变。
410,表示资源地址已经永久删除

使用了这一条

RedirectMatch 301 ^/~dir_a/(.*) 

作为参考,弄好了

WordPress使用Lighttpd的rewrite规则

嗯,即使lighttpd和php都打开了rewrite,可是在Wordpress上,使用的话,还要做点手脚才行。

参考: Lighttpd wordpress Permalink rewrite 办法

Lighttpd virtualhost configuration ~ name-based virtual hosting 

我使用的办法如下:
创建 /etc/lighttpd/wp-rewrite.conf 文件,内容为

url.rewrite-once = (
“^” + wpdir + “(wp-.+).*/?” => “$0”,
“^” + wpdir + “(sitemap.xml)” => “$0”,
“^” + wpdir + “(xmlrpc.php)” => “$0”,
“^” + wpdir + “keyword/([A-Za-z_0-9-])/?$” => wpdir + “index.php?keyword=$1”,
“^” + wpdir + “(.+)/?$” => wpdir + “index.php/$1”
)

然后修改 /etc/lighttpd/lighttpd.conf

$HTTP[“host”] =~ “” {
var.wpdir = “/”
include “wp-rewrite.conf”
}

PS:$HTTP[“host”] =~ “” 中两个“”里面什么也没有是因为我没有用vhost,直接在根目录