.htaccess WordPress添加重写规则给出404

h9a6wy2h  于 2022-11-25  发布在  WordPress
关注(0)|答案(4)|浏览(153)

我想更改特定自定义帖子类型的永久链接结构。即

http://test.com/brand/calvin-klien?mtype=tab2
                     ^this is dynamic

结束日期

http://test.com/brand/calvin-klien/mtype/tab2
                      ^this is dynamic

下面是我试过的一段代码。

正在注册add_rewrite_tag

function custom_rewrite_tag() {
        add_rewrite_tag('%mtype%', '([a-z0-9\-]+)');
    }
    add_action('init', 'custom_rewrite_tag', 10, 0);

add_action('init', 'wpse50530_journal_archive_rewrite', 10, 0);

代码1

function wpse50530_journal_archive_rewrite(){

   add_rewrite_rule('brand/([a-z0-9\-]+)/([a-z0-9\-]+)/$','index.php?name=$matches[1]/?mtype=$matches[2]','top');
}

代码2

add_action('generate_rewrite_rules', 'work_list');
function work_list($wp_rewrite) {
    $newrules = array();
    $newrules['brand/([a-z0-9\-]+)/([a-z0-9\-]+)/$'] = 'index.php?name=$matches[1]&mtype=$matches[2]';
    $wp_rewrite->rules = $newrules + $wp_rewrite->rules;

我已经尝试了上面的codesflushed permalinks,但仍然是404。我不知道为什么它在htaccess中创建**$匹配**,因为htacces不知道什么是**$匹配**
我也试过monkeyman-rewrite-analyzer plugin,它显示了正确的匹配结果,但仍然显示404
x1c 0d1x

dgiusagp

dgiusagp1#

下面的代码应该会有所帮助

add_action( 'init', 'so_27487849' );

function so_27487849() {

    add_rewrite_rule(
        '^brand/([^/]*)/mtype/([^/]*)/?',
        'index.php?name=$matches[1]&mtype=$matches[2]',
        'top');

}

冲洗你的永久链接,它应该工作。

iqih9akk

iqih9akk2#

我将继续Anand的代码进行一些进一步的修改。它在name=$matches[1]上重定向,我需要停留在我点击的同一个URL上,为此它必须包括自定义帖子类型名称。

add_action( 'init', 'so_27487849' );
function so_27487849() {
    add_rewrite_rule('^brand/([^/]*)/([^/]*)/?','index.php?brand=$matches[1]&mtype=$matches[2]','top');
                                                             ^--this
}

我得到了漂亮的URL... Yaaay!!!但是URL不包含query string(i.e: mtype=tab1),我的代码的其余部分是无用的,所以我们可以通过执行get_query_var('mtype')来实现这一点,我得到了在$_REQUEST['mtype']中工作的相同值,我的代码工作得很好。
我还关闭了monkeyman pluggin

c9qzyr3d

c9qzyr3d3#

以防万一任何人有同样的问题,并检查了这个页面。
在固定链接设置页面中,检查固定链接结构是如何配置的。最常见的是在自定义结构字段中输入/%postname%/,以使rewrite_rules正常工作。

ohfgkhjo

ohfgkhjo4#

在调用函数add_rewrite..之前或之后插入此代码status_header(200);

相关问题