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
这是一个基于好奇心的问题,而不是与任何问题相关。
我想知道 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 |