Files
plugins/RewriteRule/README.md
chorblack e75f275ef4
Some checks failed
定时更新GitHub源插件 / 自动更新GitHub插件 (push) Has been cancelled
Initial commit
2026-03-07 11:19:25 +08:00

60 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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<cid>\d+)\/$ /archives/$slug/ C
于是当访客访问 `/archives/123/` 这样的地址时, RewriteRule 便会查找对应文章的 slug 并引导访客到诸如 `/archives/a-romantic-story/` 这样的地址上。
####分析那句规则
1. 首先正则表达式 `^\/archives\/(?P<cid>\d+)\/` 会匹配先前提到的那种地址,并把其中的数字存为 `$cid` 变量。
2. 由于末尾加上了flag `C`,而且存在变量`$cid`,因此插件会搜索数据库查找对应文章。
1. 如果找到了,则扩展会补齐 `$cid, $slug, $category` 三个变量,规则指定的新地址 `/archives/$slug/`里面的变量名自然会被替换。
2. 如果没有查找到,则这句规则无效。要是后续的规则还是无效,则显示 404。
####关于 C 这个flag
这个 flag 会补全 `$cid, $slug, $category` 三个变量,只要 Pattern 里面搞到了至少一个上述变量就能工作。
要让正则给捕获组命名,写法有点难看,就像 `(?P<名字>正则表达式)` 这种。