带有查询变量的美化页面URL重定向到没有查询变量的美化页面URL

时间:2011-08-25 作者:Doggie52

我创建了一个页面(页面ID235) 使用需要传递变量的页面模板。我想通过URL传递这个变量。我的第一次尝试是用一个GET变量来传递它,效果很好。

URL: http://example.com/sok/events/?kategori=variablehere
现在,我想我应该给它加点香料并美化一下。这就是我的目标:

URL: http://example.com/sok/events/variablehere
我在尝试中使用的代码如下所示:

function setup_filter_rewrites()
{
    add_rewrite_tag(\'%kategori%\',\'([^&]+)\');
    add_rewrite_rule(\'^sok/events/([^/]*)/?\', \'index.php?p=235&kategori=$matches[1]\', \'top\');
}
add_action( \'init\', \'setup_filter_rewrites\' );
现在,当访问上面的URL时,我被重定向到http://example.com/sok/events/ - i、 e.URL,但不带查询变量。显然,正如您可能猜测的那样,查询变量在页面内是不可访问的。

我听说了redirect_canonical 函数可能会导致重写规则出现问题,因此我禁用了它。这样做之后,访问上面的URL会生成404。php请求。

正如您所看到的,我确实试图减少代码,使其尽可能简单,并使用正确的API函数。我已经检查了规则A tool to analyze rewrite rules? 它将变量报告为公共的和可访问的。我试着把这一页裁剪成一个简单的echo $wp_query->query_vars[\'kategori\'] 但这没有输出任何内容,也没有阻止重定向。

我怀疑重定向是这里的问题所在-如果我能阻止它,我相信我能够获取查询变量。

此问题类似于URL Rewrite + Page + Custom Post Type = Unusual RedirectQuerystring parameter getting lost in rewrite rule 到目前为止,这也是一个重定向错误。然而,在我的情况下,我没有处理任何类型的自定义帖子。

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

我想你只需要补充一下kategori 到查询变量数组:

EDIT- 经过多次迭代,我们终于找到了一个解决方案。原始代码似乎正常工作,但只使用特定的永久链接设置,因为我被错误地路由到帖子而不是页面。而不是p=, 应该是这样的pagename=, 路径中同时包含父页和子页:

function setup_filter_rewrites()
{
    add_rewrite_rule(\'sok/events/([^/]*)/?\', \'index.php?pagename=sok/events&kategori=$matches[1]\', \'top\');
}
add_action( \'init\', \'setup_filter_rewrites\' );  

function setup_filter_query_vars( $query_vars )
{
    $query_vars[] = \'kategori\';
    return $query_vars;
}
add_filter( \'query_vars\', \'setup_filter_query_vars\' );

结束

相关推荐