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