Wordpress 如何将目录请求转换为数据库生成的页面?

How does Wordpress convert directory requests into database generated pages?

这是一个基于好奇心的问题,而不是与任何问题相关。

我想知道 Wordpress 如何将伪 URL 地址(例如博客。com/posts/2015/05/05/example_blog_post)纠正为 php 生成的页面?此重定向过程背后的机制是什么?

这实际上是来自服务器配置的规则,而不是专门针对 CMS 的规则。例如,common Apache config 是:

RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

倒数第二行如果“如果 URL 不作为目录存在,也将其传递给 WordPress”。

剩下的由 rewrite engine 处理,它是一堆已编译的正则表达式。如果您有 WordPress CLI,您可以 运行 wp rewrite list 它会按优先顺序向您显示整个列表:

match query source
(.?.+?)/embed/?$ index.php?pagename=$matches[1]&embed=true page
(.?.+?)/trackback/?$ index.php?pagename=$matches[1]&tb=1 page
(.?.+?)/page/?([0-9]{1,})/?$ index.php?pagename=$matches[1]&paged=$matches[2] page
(.?.+?)/comment-page-([0-9]{1,})/?$ index.php?pagename=$matches[1]&cpage=$matches[2] page
(.?.+?)(?:/([0-9]+))?/?$ index.php?pagename=$matches[1]&page=$matches[2] page
[^/]+/attachment/([^/]+)/?$ index.php?attachment=$matches[1] post