正确访问显示页面,同时传入GET参数

时间:2012-01-18 作者:Frank

我有一个wordpress页面名为:directory(它使用自定义模板)。

当我使用以下命令调用页面时:

http://localhost:8888/wordpress/directory/?segments=listings/list
它给了我所需要的结果。现在,我需要使url更干净,以便它看起来像:

http://localhost:8888/wordpress/directory/listings/list
我试过这个。htaccess运气不佳(我遇到一个内部服务器错误):

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wordpress/
RewriteRule ^index\\.php$ - [L]
RewriteRule ^directory/?(.*) /wordpress/directory/?segments=$1 [QSA, L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wordpress/index.php [L]
</IfModule>
# END WordPress
你知道我该怎么做吗?

编辑:

哎呀,仔细看看WP Rewrite Class 佩奇指出,德韦恩,我看到他们提供的具体例子正是我所需要的。该页上的代码是在以下情况下提供的:

一个快速而肮脏的重写示例。。。

add_filter( \'rewrite_rules_array\',\'my_insert_rewrite_rules\' );
add_filter( \'query_vars\',\'my_insert_query_vars\' );
add_action( \'wp_loaded\',\'my_flush_rules\' );

// flush_rules() if our rules are not yet included
function my_flush_rules(){
    $rules = get_option( \'rewrite_rules\' );

    if ( ! isset( $rules[\'(project)/(\\d*)$\'] ) ) {
        global $wp_rewrite;
        $wp_rewrite->flush_rules();
    }
}

// Adding a new rule
function my_insert_rewrite_rules( $rules )
{
    $newrules = array();
    $newrules[\'(project)/(\\d*)$\'] = \'index.php?pagename=$matches[1]&id=$matches[2]\';
    return $newrules + $rules;
}

// Adding the id var so that WP recognizes it
function my_insert_query_vars( $vars )
{
    array_push($vars, \'id\');
    return $vars;
}
我只是在示例代码中用“directory”代替“project”,用“segments”代替“id”,并使用“(directory)/(.*)$”来匹配规则。我把它放在我的插件中,它运行得很好。

谢谢你的帮助。

1 个回复
SO网友:Dwayne Charrington

正如您所发现的,Wordpress忽略了添加到您的中的重写规则。手动访问htaccess文件。实际上,没有多少人知道Wordpress有内置函数,这是一个核心重写类,允许您将自定义重写规则添加到主题函数中。php文件。

您可以阅读WP\\U重写类here 如果你在这个网站上搜索,你会发现很多人问你类似的问题。

我坚信为您编写和发布代码是欺骗行为,但如果您访问上述链接并进行搜索,您将找到实现自定义重写规则所需的所有信息。

当然,如果你陷入困境,请张贴你最终编写的代码,我和其他人将很乐意帮助你,并为你指出正确的方向。

结束