「水坑」略深入的讲解伪静态相关的知识

吐槽/反馈/建议:我的咸鱼心  爱发电-@wdssmq  FeedsPub-wdssmq

url 理论上指向的是一个文件,即使是目录也会按默认设置寻找 index.html 或 index.php,不存在时则由 web 环境返回 404。

但是对于 Z-BlogPHP 这样的动态站点,url 指向都是 index.php,然后由内部逻辑决定是否抛出 404;

让 url 指向 index.php 的实现叫「URL Rewrite」,中文常对应为「伪静态」,虽然严格来说「伪静态」(Pseudo-static)只是「URL 重写」的应用之一;

Redirect 则是「重定向(301)」,虽然可以理解为带有 301 标志的 Rewrite(?);

为什么叫「水坑」见:

「水坑」系列教程索引

代码及讲解注释见下边 Git 链接;

每个链接对应一次「Git 提交」状态,也就是「版本控制」,你可以按顺序复制保存到你的 web 环境进行测试,比如URL_Rewrite/index.php

大概理解后就换下一个「版本」覆盖进同一文件查看效果;

---

纯动态模式 - php-rewrite/index.php · 70063e1 · 沉冰浮水/水水的旧代码合集 - Gitee.com

https://gitee.com/wdssmq/StaleCode/blob/70063e12f67c31ba5588a2b2a0a0e3fe727ea37b/php-rewrite/index.php

---

php-rewrite · 沉冰浮水/水水的旧代码合集 - 码云 - 开源中国:

https://gitee.com/wdssmq/StaleCode/tree/c04e9f96f4654f484510b93d7453ebf0f6c8b53f/php-rewrite

↑ 这里可以查看效果截图(纯动态模式)

会发现/?id=1024/post/2048.html两种访问返回的「不存在」是不一样的,后者的 404 是由「web 程序」返回;


「- 现在已经 00:41:31 了,提交一下明天继续; -」

「- 补充了几句,拖到 00:46:31 了; -」


所以继续,前一步代码中已经定义了$options["is_rewrite"]作为伪静态的开关;

现在将该值改为true然后增加一些代码;

---

针对性的伪静态 - php-rewrite/index.php · 6464486 · 沉冰浮水/水水的旧代码合集 - Gitee.com:

https://gitee.com/wdssmq/StaleCode/blob/6464486539fdb4f53a9b834d2a2d444587f14fe8/php-rewrite/index.php

---

上边网址是此版本内index.php文件的完整代码,可以通过右边链接查看此提交的「文件变更」信息针对性的伪静态 - php-rewrite/index.php · 6464486 · 文件变更查看

其中增加的 PHP 代码如下,本质概念是,在「网站程序」内「打开伪静态选项」然后根据选项「变更输出到网页的内容(主要是链接)」;

// 伪静态开关切换
$options["is_rewrite"] = true;

// 文章 url 改为静态形式
if ($options["is_rewrite"]) {
  $post["url"] = $options["host"] . "post/3.html";
}

↑ 建议使用前边的「文件变更」链接查看,会发现除了index.php内容有修改外,还多了一份.htaccess

而只有正确配置.htaccess才能完整实现需要的伪静态效果;

注:.htaccess为 Apache 的配置文件,IIS 和 Nginx 同样有各自的规则语法;

总结:

PHP 代码和文件属于「网站程序」;

IIS/Nginx/Apache 则可以称为「web 程序」,「web 程序」配合 PHP 或其他语言的解析引擎,再加上 MySQL 或其他数据库,构成「web 环境」;

开场提到的「URL Rewrite」则是「web 程序」所提供的功能;

通常意义上,对于 Z-BlogPHP 或其类似程序,「开启伪静态」需要:

  • 程序本身支持;
  • 开启相应选项开关;
  • 正确配置「web 程序」对应的规则文件;

其他需要了解的:

  • 启用伪静态后,/?id=3/post/3.html均能打开,且访问到的内容是一样的,不是 Bug,(本文示例中)也不能让前者「重定向(301)」到后者,会出错;
  • 启用伪静态后,?id=1024post/2048.html均由 PHP 返回不存在信息;
  • 由 PHP 输出 404 时,应该同时设置状态码:
    php if ($status == "404") { header("HTTP/1.1 404 Not Found"); header("status: 404 Not Found"); }
  • 「重定向(301)」功能——「网站程序」和「web 程序」都能实现,对于有规律的,强烈建议由「web 程序」实现;
    • 好吧。。好像 301 和 302 都算「重定向」,只不过是永久和临时的区别;
    • 302 到是一般由「网站程序」自己使用;
  • 在本文中只配置了「文章」的伪静态规则,实际程序中还会有「标签」「分类」「日期」等等,各自写 Rewrite 规则好像就比较繁琐了;

「- 大概就这样吧,写完中午都过去了。 -」


爱发电

本文标题:《「水坑」略深入的讲解伪静态相关的知识》作者:沉冰浮水
原文链接:https://www.wdssmq.com/post/20190704012.html
特别注明外均为原创,转载请注明。

分享到微信

扫描二维码

可在微信查看或分享至朋友圈。

相关文章

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

网站分类

搜索

本周旧文

2024 年了,姑且备份下嘟特存档。。

……,一个不知名的小众样式库 + 内联样式混写这种入坑姿势确实很有槽点,但是,「已经开始学」并且能够持续是绝对值得肯定的。。

在贴吧看过很多提问了,就有种错觉:好多人为了提一个问题专门注册了贴吧,问题本身可能得到有效回答,也可能没有(和提问的点及具体姿势有关。。但无论如何,之后就和注销了账号一样没有然后了,好像之后永远不用学相应的东西一样。。

《恶魔娃娃》

- 他们正研究你究竟是真正的大人,还是伪装成大人的小孩

- 我自己都研究很久了

乐高 DC 里,(基本就蝙蝠侠家,,年龄最小的那个无论是谁感觉人设都会变得一样 - -

所以,就感觉和祥林嫂一样,每天都需要向外「签到」自己的情绪感受,然而又并没有什么「需要」我这样的签到……

只要梦里出现学校的概念,形式和反抗好像也都不重要了,,天还没亮,骑自行车去上学,没走多远「想起来」并不需要上学的,下来搬起车原地调头然后推回家。。

《K 星异客》里,「青鸟」真的是等来的,或者说是突然出现然后引发改变的外部因素。。。

梦的最后也是又一次意识到教室里的同学只是幻境中的投影,被困住的只有我;虽然也终于总结出,在梦里从来没有和同学的投影有过冲突和争执,甚至还附和我反驳「管理者」身份被进一步放大并不特指某一个人的老师。。

就和大脑会突然播放某一首歌一样,「讨厌自己」这句话也是自己突然就会播放一次,然后频率更高。。

学校,学校,学校,总是梦到学校,,就好像灵魂被诅咒禁固一样。。

爱发电支持者

最新留言

友情链接

  • 订阅本站的 RSS 2.0 新闻聚合
召唤伊斯特瓦尔