Wordpress URL重写 - 现有页面后的URL的一部分

时间:2014-09-30 17:29:48

标签: php wordpress .htaccess mod-rewrite

我尝试重写以下网址(%2F/):

/archives/JHW
 -> /archives?RefNo=JHW

/archives/JHW/1/1
 -> /archives?RefNo=JHW%2F1%2F1

/archives
 -> no redirect

我们的想法是让网址看起来不错,但之后只能使用$_GET['RefNo']页面中已经存在as a page/archives来抓取其余路径。到目前为止,我已经:

RewriteRule ^archives/(.+)/? /index.php/archives/?RefNo=$1 [QSA,L]

但这似乎并没有起作用。

我已经在functions.php内为我的主题添加了此代码:

add_rewrite_rule(
    'archives/(.+)/?',
    'index.php/archives?RefNo=$1',
    'top'
);

然后转到Permalinks中的/wp-admin页面,使其重新生成.htaccess文件。当我看到那里的.htaccess规则时,它并没有像我期待的那样开始。

我哪里错了?


更新

我当前的.htaccess文件是:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^archives/(.+)/? /index.php/archives/?RefNo=$1 [QSA,L]
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>

1 个答案:

答案 0 :(得分:1)

我偶然发现的一个可能的解决方案是(在主题functions.php内):

function archives_page_rewrites() {
    add_rewrite_tag('%RefNo%', '([^&]+)');
    add_rewrite_rule(
        '^archives/(.*)/?$',
        'index.php?pagename=archives&RefNo=$matches[1]',
        'top'
    );
}
add_action('init', 'archives_page_rewrites');

我愿意相信还有其他方法可以做到这一点,这可能是也可能不是最好的解决方案。如果在良好实践方面好/坏,请随意上/下这个。