将URL从/%postname%/%post_id更改为/%ategory%/%postname%/%post_id%

时间:2019-10-03 作者:cjmi

我想将类别添加到我的URL结构中。我确信这已经涵盖了,我在网上找到了许多资源来创建重定向代码。htaccess,但当我输入代码时,它不起作用。运行Apache服务器。

基本上,我想从

https://example.com/this-is-a-post/1111

https://example.com/posts-category/this-is-a-post/1111
我将以下内容添加到我的。htaccess:

RedirectMatch 301 ^/([^/]+)/(\\d+)/$ https://example.com/$1
但当我从外部资源(谷歌、Reddit等)访问链接时,仍然会收到404条

1 个回复
SO网友:Sally CJ

首先,我引用@MrWhite\'s 备注:

你不能在.htaccess - 您希望在哪里获得posts-category 从中分离?

他是对的—你不应该使用.htaccess.

我们有2000多篇文章和55000个这些文章的反向链接。如果我只是改变永久链接,我将有超过50k的404,这将破坏网站。

您应该只更改永久链接结构,并使用自定义代码将旧URL重定向到新URL。

Step 1: Change the permalink structure.

只需转到永久链接设置页面,在自定义结构框中输入以下内容:

/%category%/%postname%/%post_id%/

Step 2: Add custom PHP/WordPress code to redirect old URLs to new ones.

这是一个使用parse_request 胡克:(这符合你的主题functions.php 文件),代码使用以下两个WordPress函数:get_post_field()wp_redirect())

add_action( \'parse_request\', \'maybe_redirect_old_permalinks\' );
function maybe_redirect_old_permalinks( $wp ) {
    if ( preg_match( \'#^([^/]+)/(\\d+)$#\', $wp->request, $matches ) ) {
        list ( $path, $slug, $id ) = $matches;
        // Redirect to the new permalink, if the slug and ID match.
        if ( $slug === get_post_field( \'post_name\', $id ) ) {
            wp_redirect( get_permalink( $id ), 301 );
            exit;
        }
    }
}
这种方法还意味着example.com/<post slug>/<post ID>example.com/<post category>/<post slug>/<post ID> 会有用的。但在页面(发布内容、小部件等)上,post permalinks只能采用更高的格式。

相关推荐

如何在一次HTAccess中创建多个站点的重写规则?

我正在为两个不同的网站使用一个数据库。一个是sitejury。另一个是cdn1。现场陪审团。com。我正在尝试使用子域服务我的文件。之前,我在我的域中使用了简单的https重写。但现在随着我的需求越来越大,对我来说设置变得越来越复杂。我需要重定向两个www.domain。com或域。com收件人https://domain.com重定向cdn的所有版本。领域com到SSL https//:域。com版本除外(选项3)子文件夹“wp content”和“wp includes”保留在这两个域中。具有http