了解.htaccess重写后的查询字符串

时间:2017-10-18 作者:Djave

我理解Wordpress的说法。htaccess,如下所示:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
将所有查询发送到索引。php(除非服务器上存在文件名等)。

所以,如果我去http://example.com/checkout Wordpress将其改写为http://example.com/index.php?pagename=checkout.

但我不明白的是,在页面模板的顶部

<?php print_r($_GET) ?>
当我导航到http://example.com/checkout 返回Array(). 我希望你能Array(\'pagename\' => \'checkout\');

如何访问Wordpress在处理URL时使用的变量?

3 个回复
最合适的回答,由SO网友:Milo 整理而成

它并不是在传统意义上重写URL,URL解析完全在PHP中进行。

您可以访问全局$wp_query->query_vars, 或使用get_query_var 作用

还要注意的是parse_request 是可获取此信息的最早操作。

SO网友:kero

它调用index.php, 不index.php?page=...

我不确定WordPress是如何路由的,但您可以使用$_SERVER[\'PATH_INFO\']$_SERVER[\'REQUEST_URI\']

SO网友:janh

别被这些名字骗了。mod\\u重写规则和WordPress重写规则是两个截然不同的东西。

在中。htaccess,有mod\\u重写规则,除了运行WP的索引外,不会执行任何操作。php处理任何不直接命中现有文件或目录的请求。

为了弄清楚/checkout意味着什么,WordPress依赖于自己的一套重写规则,这些规则与mod\\u rewrite没有任何关系,所以不要混淆。

WordPress\'$redirect 部分看起来像是通过HTTP GET传递变量,但事实并非如此。这些将用作重写标记。请参见documentation for add_rewrite_rule 下面是一些示例和进一步的解释。

结束

相关推荐

Custom Feed URLs

我正在为我的一个帖子类型创建一个自定义提要,并允许用户设置该提要的名称。http://www.mysite.com/feed/userdefinedname现在,我还想让用户不仅可以显示该CPT中的所有帖子,还可以按类别过滤它们。目前情况是这样的:http://www.mysite.com/feed/testcategory然而,如果我能将其结构如下,我会非常喜欢它:http://www.mysite.com/feed/userdefinedname/testcategory这可能吗?下面是生成这些基于类