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

吐槽/反馈/建议:我的咸鱼心  爱发电-@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
特别注明外均为原创,转载请注明。

分享到微信

扫描二维码

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

相关文章

发表评论:

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

网站分类

  • 订阅本站的 RSS 2.0 新闻聚合

搜索

本周旧文

搬家也告一段落,虽然搬过来的东西还得归置,新衣柜虽说已经散俩月味儿了,但还是不想放衣服进去。

要不我每年汇总整理一次??碎雨集_沉冰浮水_第1页

所以,不带这条的话,2024 年目前只发了 13 条嘟????

VSCode 内 git 操作卡住的时候没办法主动取消一直是个痛点,一般都是推送或拉取,今天连提交都卡了。。

又一个夏天过去了,所以今年也没买防水鞋套;然后天凉了,为了应对踢被子买了睡袋,不知道 1.2 米会不会略窄。。

《五至七时的克莱奥》,2018 年 6 月加入列表,21 年 11 月底发现 B 站上线了这部,直到前几天才看完,还是分两次看的。。接下来有五项是 2019 年的,都是电影 —— 略长的待办列表。。

有用程序自动抓取自己带 tag 的嘟,然后按年备份后从线上删除;刚发现去年的数据有备份但是没删线上??和本地数据对比后发现线上的还少一条,Why??

本质上,每个人需要的是「让自己面临的问题得到解决」的能力。。

这又涉及到直接能力和间接能力,,缺乏直接能力很正常,视情况可以通过学习来掌握直接能力,或者「请」有直接能力的人来帮自己解决。。

缺乏间接能力的情况是真没救,尤其是对「这是**我自己**面临的问题」这一前提没有明确认知的人。。

其实,在认知意义上,焦虑时我知道这种情绪对应「焦虑」这个文法词汇,此外还有「压抑」「悲伤」等等,然而「抑郁」其实是个我认知体系外的词,虽然经常一些情绪感受我找不到对应的语言词汇来表述,却也只能将其实表述为「找不到对应的语言词汇来表述」的某些感受。。

所以,我所面对的问题又可以明确向哪里寻求帮助呢?

爱发电支持者

最新留言

友情链接