重定向和重写(改写)的区别(Redirect and Rewrite)

我今天因 Hexo 自动升级到了 Hexo 6.3.0 导致文章链接全部异常,无法访问。在不得已的情况下最终决定将错就错,把之前的 log/**.html 路径改为 log/**/。三番五次折腾,最终配置好,但是路径一改需要处理的事情就比较多了,所以万不得已千万别修改路径。尚需先处理好重定向,重定向可以让访客通过之前发布的地址依旧可以查看对应的内容。

在配置重定向的时候,看到有两个选项,翻译过后 Redirect 表示重定向,Rewrite 表示改写(也就是我们常说的重写,后续统一使用重写)。有点懵,因为以前只在 .htaccess 上配置过域名重定向和目录重定向。万事不懂,谷歌搜索、百度一下,但是结果令人汗颜,相关内容少之又少,而且那仅有的几条标题上含相关关键词的内容里面讲的也都是重定向没有重新。

没有作业可以抄,那就只能自己动手实践,实践出真知!

便于直观的理解,下面直接用我的案例演示重定向和重写的区别。

图中 :bar 和正则 (.*) $1 方法类似

重定向和重写的区别

重定向的特性

重定向:当 A 链接重定向到 B 链接时,打开 A 链接后会自动跳转到 B 链接,浏览器地址栏也会显示 B 链接。

重写的特性

重写:当 A 链接重写为 B 链接时,打开 A 链接看到的是 B 链接的内容,浏览器地址栏依旧显示 A 链接。

  • 例如我把文章路径改为 https://yijile.com/log/141/ ,且服务器已经没有https://yijile.com/log/141.html 这个文件
    • 这个时候访问 https://yijile.com/log/141.html 会显示 404 找不到页面的提示
    • 配置重写后,访问 https://yijile.com/log/141.html 会显示 https://yijile.com/log/141/ 页面的内容
    • 重写有点像反向代理,不是嵌套 iferma,相当于服务器真实存在这个文件,但是服务器实际上并没有这个文件。

Relay Tips: 一极乐https://yijile.com/log/141/