重写规则的工作方式与预期不同

时间:2021-08-25 作者:Max

我们在一个带有自定义分页的自定义页面上发布博客文章。例如,博客帖子的名称是url。de/postname而不是url。de/blog/postname。

因此,我们有一个页面/博客/上面有分页。来自分页模块的链接(如/blog/2)导致404错误页,因为缺少/页/部分。

我无法编辑页面URL-因此我想对此使用重定向规则。

到目前为止我得到的:

function my_pagination_rewrite() {
    add_rewrite_rule( \'(([^/]+/)*blog)/?([0-9]{1,})/?$\', \'index.php?pagename=$matches[1]&paged=$matches[3]\', \'top\' );
}

add_action( \'init\', \'my_pagination_rewrite\' );
但这会导致/blog/2/page/2-->;404

如何获取此代码以返回/blog/page/2或仅返回/blog/2/(并显示/blog/page/2的内容)

谢谢你的帮助!

2 个回复
SO网友:Pierre R

我将添加另一个答案,因为规则只是问题的一部分。

以下是我已经测试并正在工作的内容:

<?php
class BadRewritesRules {

    public function __construct() {
        add_action(\'init\', [$this, \'custom_post_types_rewrite_rules\']);
        remove_filter(\'template_redirect\', \'redirect_canonical\');
    }

    public function custom_post_types_rewrite_rules() {
        add_rewrite_rule(\'(blog)/([0-9-]+)[/]?$\', \'index.php?pagename=$matches[1]&paged=$matches[2]\', \'top\');
    }

}

new BadRewritesRules();
实际上,我使用了另一个URL,您可以看到它在这里工作:https://tests.pierre-roels.com/bad-rewrite-rules/2/您可以使用分页,也可以查看每个“;“成员”;用同样的子弹。

但正如我所说,我认为这是一个糟糕的解决方案,因为我们必须消除template_redirect 行动挂钩。最好是挂在Laravel部分,以正确的方式建立链接:(或者.htaccess 重新使用

每次更改时,不要忘记冲洗permalinks。要执行此操作,只需转到“设置”>;永久链接并提交页面

以下是解决方案。H访问。将此添加到。htaccess:

RewriteRule (blog)/([0-9]+)/? /$1/page/$2/ [R=301,L]

别忘了修正你的规则:add_rewrite_rule(\'(blog)/page/([0-9-]+)[/]?$\', \'index.php?pagename=$matches[1]&paged=$matches[2]\', \'top\');.

我为您做了另一个测试:https://tests.pierre-roels.com/blog/2/

此解决方案允许您不删除template_redirect 钩子,它将用户重定向到右端url

SO网友:Pierre R

您应该在URL中保留slug页面。它更容易阅读,也更容易阅读。

以下是正确的:

add_rewrite_rule( \'(blog)/page/([0-9-]+)[/]?$\', \'index.php?pagename=$matches[1]&paged=$matches[2]\', \'top\' );

相关推荐

WP_safe_redirect not working

而不是Divi主题中的项目档案/project_category/[category name]/ 我想让他们去/portfolios/#[category name].我修改了以下代码this question 并将其添加到我的孩子主题中functions.php 文件function my_category_redirect() { if ( is_category( ) ) { $category = get_queried_object();