我在本地机器中安装了wordpress:所以我的家是http://localhost/wordpress(尚未创建任何虚拟主机条目)
我创建了一个名为test的页面,page_id=19。现在我需要使用如下重写:
何时会有任何请求http://localhost/wordpress/group/abc,应将其转换为http://localhost/wordpress/?page_id=19&group=abc
我的.htaccess:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wordpress/
RewriteRule ^index'.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wordpress/index.php [L]
</IfModule>
#结束WordPress
我尝试过的:
add_action('init', function() {
global $wp_rewrite;
$wp_rewrite->flush_rules();
add_rewrite_rule('^group/([^/]+)', 'index.php?page_id=19&group=abc', 'top');
add_rewrite_tag('%group%', '[A-Za-z]+');
});
但每当我试图访问http://localhost/wordpress/group/abc我得到404错误。
请建议,我做错了什么吗。
提前谢谢。
经过大量的重新搜索发现:
- 使用pagename而不是page_id总是安全的
- 应该注册所使用的自定义查询变量(此处为组)
- 还有一个名为rewrite_rules_array的过滤器
所以上面的代码可能看起来像(添加的页面名称是测试):
add_filter( 'query_vars', function($query_vars) {
$query_vars[] = 'group';
return $query_vars;
});
add_action('init', function() {
global $wp_rewrite;
$wp_rewrite->flush_rules();
add_rewrite_rule('group/(.*)', 'index.php?pagename=test&group=$matches[1]', 'top');
});
但是我们不能通过$_GET['group']
访问组值。我们需要通过get_query_var('group')
访问它
添加重写规则的另一种方法:
add_action( 'rewrite_rules_array', 'rewrite_rules' );
function rewrite_rules( $rules ) {
$newrules = array();
$newrules[ 'group/(.*)/?$' ] = 'index.php?pagename=test&group=$matches[1]';
return $newrules + $rules;
}