custom url rewrite

时间:2012-02-03 作者:yuli chika

我有一个自定义搜索,一个来自WP的数据库,我将页面存储在wordpress管理面板中:

http://localhost/wp/wp-admin/post.php?post=96&action=edit&message=1

然后页面的url如下所示http://localhost/wp/directory/view?search=moto&number=12

现在我想将其修改为http://localhost/wp/directory/view/moto/12. 我试过这个方法RewriteRule ^directory/view/(.*)/(\\d+)/$ directory/view?search=$2&number=$3, 以及整个.htaccess 是:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wp/
RewriteRule ^index\\.php$ - [L]
RewriteRule ^directory/view/(.*)/(\\d+)/$ directory/view?search=$2&number=$3 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wp/index.php [L]
</IfModule>
# END WordPress
但它不起作用,需要一个工作代码,谢谢,

编辑:我试过了add_rewrite_rule 仍然不起作用。。。为了避免页面名称感染,最好使用directory/view.

function add_directory_rewrite() {
    add_rewrite_tag("%search%", \'(.+)\');
    add_rewrite_tag("%number%", \'(\\d+)\');
    add_rewrite_rule(\'^directory/view/(.+)/(\\d+)/\', \'directory/view?search=$matches[1]&number=$matches[2]\', \'top\');
}
add_action( \'init\', \'add_directory_rewrite\' );

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

您的重写规则应为:

add_rewrite_rule(\'^directory/view/(.+)/(\\d+)/\', \'index.php?pagename=directory/view&search=$matches[1]&number=$matches[2]\', \'top\');
记住在每次编辑后刷新重写规则(转到设置>永久链接)。

编辑添加了完整的代码示例。

function add_directory_rewrite() {
    add_rewrite_tag("%search%", \'(.+)\');
    add_rewrite_tag("%number%", \'(\\d+)\');
    add_rewrite_rule(\'^directory/view/(.+)/(\\d+)\', \'index.php?pagename=directory/view&search=$matches[1]&number=$matches[2]\', \'top\');
}
add_action( \'init\', \'add_directory_rewrite\' );
在第页中。用于测试目的的php:

<?php echo get_query_var("search"); echo get_query_var("number"); ?>
这在我自己的网站上有效,甚至将博客url更改为/blog/以测试结构。

如果仍然不起作用,可以清空htaccess并再次将其保存在设置>永久链接中(确保文件可写)。

已从中删除尾部斜杠\'^directory/view/(.+)/(\\d+)/\' 这是可行的。

结束

相关推荐