我有一个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)/(.*)$”来匹配规则。我把它放在我的插件中,它运行得很好。
谢谢你的帮助。