一个能让你的 Typecho 在 404 显示之前重定向到其他地方的插件。
Blog: http://note.laobubu.net/archives/typecho-rewriterule
将东西丢到 usr/plugins/RewriteRule
下即可,文件夹自建。
访问后台-插件管理,启用 RewriteRule 后方可设置。
在输入框内输入跳转的规则,一行一个。每一行格式如
用来匹配的Pattern 新地址[ 可选的flags]
例如 ^\/(\d+)\/?$ /archives/$1 T
会把诸如 /27
或者 /27/
的地址跳转到 /archivers/27
上(而且因为这里有 T 这个flag,所以采用的是302临时重定向)
flags 的字母代号不分大小写,不需要间隔符。
flag | 功能 | 注 |
---|---|---|
T | 这是一个302临时重定向。 | 若无此flag,则默认301 |
I | 为正则表达式打开i选项(即不分大小写) | … |
C | 按照条件查找文章。 | 这个有点复杂,注意看下面的 应用举例1 之 分析那句规则 |
##应用举例
###让不同的永久链接共存
####一个故事
Yang 用 Typecho 搭建了一个 Blog,写了一些文章,但是由于一直没有设置永久链接,因此他的文章地址一直是 /archives/123/
这样的。
有一天 Yang 为了提高网址易读性,他决定将永久链接改变为 /archives/a-romantic-story/
这样的格式,但是苦于过去的链接会失效,一直纠结怎么使得旧地址能跳到新地址上。
后来,他安装了 RewriteRule 这个插件,并添加了如下一句跳转规则:
^\/archives\/(?P<cid>\d+)\/$ /archives/$slug/ C
于是当访客访问 /archives/123/
这样的地址时, RewriteRule 便会查找对应文章的 slug 并引导访客到诸如 /archives/a-romantic-story/
这样的地址上。
####分析那句规则
- 首先正则表达式
^\/archives\/(?P<cid>\d+)\/
会匹配先前提到的那种地址,并把其中的数字存为$cid
变量。 - 由于末尾加上了flag
C
,而且存在变量$cid
,因此插件会搜索数据库查找对应文章。- 如果找到了,则扩展会补齐
$cid, $slug, $category
三个变量,规则指定的新地址/archives/$slug/
里面的变量名自然会被替换。 - 如果没有查找到,则这句规则无效。要是后续的规则还是无效,则显示 404。
- 如果找到了,则扩展会补齐
####关于 C 这个flag
这个 flag 会补全 $cid, $slug, $category
三个变量,只要 Pattern 里面搞到了至少一个上述变量就能工作。
要让正则给捕获组命名,写法有点难看,就像 (?P<名字>正则表达式)
这种。