WordPress完整的apache .htaccess是这样的
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
nginx, 则是
location / {
try_files $uri $uri/ /index.php?$args;
}
两者都是实现一个目地:
将所有的uri请求转给index.php. index.php作为入口, 在某个时候调用wp-includes/class-wp.php,
由parse_request函数负责解析当前的uri.
我举个简单的例子,当你的permalink structure设置为/%postname%/%post_id%.html
然后,wp内部生成相对应的正则, ([^/]+)/([0-9]+).html(/[0-9]+)?/?$
访问http://www.test.com/i-am-a-post/123.html
时,
list( $req_uri ) = explode( '?', $_SERVER['REQUEST_URI'] );
$req_uri = trim($req_uri, '/');
这时,$req_uri的值为i-am-a-post/123.html. 与permalink structure的正则匹配上了,获取后面的id,也就是123, 然后就是get_post了...
这个例子是非常简化版的wp解析uri过程.
大部分程序,包括框架,也是这样实现你所谓的"伪静态".
一般,大家都称这个过程为routing. 由两个部分组成: parser
和dispatcher
不推荐阅读wp代码, 尤其是新手.
补充下:
wp生成的正则 ([^/]+)/([0-9]+).html(/[0-9]+)?/?$.
后面的(/[0-9]+)?/?$ 是用来匹配分页的.
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。