我尝试重写以下网址(%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>
答案 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');
我愿意相信还有其他方法可以做到这一点,这可能是也可能不是最好的解决方案。如果在良好实践方面好/坏,请随意上/下这个。