如何发送不存在显式文件的网页

How to send web pages for which explicit files do not exist

当 URL 对应不存在的 directory/file 时,MediaWiki、Drupal、Wordpress 等 CMS 如何显示正确的页面。

澄清一下,如果我转到 url https://en.wikipedia.org/wiki/Example,维基百科的服务器上没有目录 /wiki/Example,MediaWiki 会根据数据库中的模板和信息等创建页面。我在问 CMS 如何 "Hijacks" 请求那个 directory/file 以便发回它自己的页面而不是 404。

我问的是关于 php 的问题,因为那是我正在使用的东西,也是大多数 CMS 似乎主要基于的东西。

基本概念很简单:

  1. 使用 custom 404 而不是默认值
  2. 动态生成内容based on the entered url

Web 服务器(即 Apache、Nginx...)有可能捕获请求 URL 并将它们转换为其他东西,其他一些 URL。最常见的方法是使用放置在站点根目录中的 .htaccess 文件。在某些系统中,以点 (.) 开头的文件默认隐藏,因此您必须在某处启用某些内容才能完全看到它们。

它包含规则(除其他外)如何识别一些路线或一组路线以及如何处理它们。

即你有 "virtual" 路径,如:

/event/32

您将创建一个规则来捕获以“/event/”开头的每个路径,并捕获之后的部分(“32”),而不是打开不存在的目录,它会调用一些脚本,如:

 /event.php?event_id=32

因此捕获的参数已作为获取参数 "event_id" 发送到 event.php 脚本。

为此 search/replace 和捕获路径部分使用了正则表达式。

你有很多在线教程如何做到这一点,只是 google 给他们:

https://www.addedbytes.com/blog/url-rewriting-for-beginners

https://mediatemple.net/community/products/dv/204643270/using-htaccess-rewrite-rules

https://help.dreamhost.com/hc/en-us/articles/215747748-How-can-I-redirect-and-rewrite-my-URLs-with-an-htaccess-file-

.....

主要服务器配置位于其他服务器目录中,很可能只有服务器管理员可以访问。但是这个 .htaccess 文件是一种允许 "common users" 进行一些配置更改的方法,这将仅适用于放置该文件的目录及其子文件。

但是你也可以用 .htaccess 文件做很多其他事情,比如发送一些头参数,allow/forbid 访问一些 files/directories,设置一些简单的登录机制(密码保护)和更多...