使用mod_rewrite隐藏类别名称

时间:2016-01-07 作者:Anthony Lim

我有一个网站,至少有3个类别。我已将其中一个设置为默认类别。

下一步是,我需要从URL slug中隐藏默认类别的类别slug,其余类别应该保持不变。

我当前的永久链接结构是:/%类别%/博客/%帖子名称%/示例:/en/blog/wordpress帖子示例/

我需要它是:/blog/wordpress帖子示例/

其他类别应保持不变:/fr/法文职务//de/德文职务/

我目前的htaccess内容如下:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\\.website\\.com$
#RewriteRule ^blog/(.*)/?$ /en/blog/$1/ [L]
我尝试过以上方法,但当我访问/博客/wordpress post sample/时,我得到了404的回复。

注意:如果我添加了R=301标记,它会正确地将url重定向回/en/blog/url,但在删除R=301时没有运气。

PS:我想有一个无插件的解决方案。

感谢您的帮助。干杯

https://wordpress.org/support/topic/hide-category-name-using-mod_rewrite

1 个回复
最合适的回答,由SO网友:Anthony Lim 整理而成

我解决了我的问题。我所需要的只是WordPress重写API。

if( ! function_exists(\'theme_add_rewrite_rules\') ){
    function theme_add_rewrite_rules(){
        add_rewrite_rule(
            \'^blog/([^/]+)/?$\',
            \'index.php?name=$matches[1]\',
            \'top\'
        );
    }
}
add_action( \'init\', \'theme_add_rewrite_rules\');
这解决了wordpress将如何解析URL的问题。问题的一半是如何修改帖子,使链接不包含/en/slug。下面的代码应该可以解决这个问题。

if( ! function_exists(\'rewrite_blog_url\')){
    function rewrite_blog_url($url){
        if( strpos( $url, \'/en/blog/\' ) >= 0 ){
            return str_replace( \'/en/blog/\', \'/blog/\', $url );
        }
        return $url;
    }
}
if( ! function_exists(\'rewrite_blog_post_url\')){
    function rewrite_blog_post_url( $url, $post, $leavename ) {
    if ( $post->post_type == \'post\' ) {
        return rewrite_blog_url($url);
    }
    return $url;
}
}
add_filter(\'the_permalink\', \'rewrite_blog_url\');
add_filter(\'the_content\', \'rewrite_blog_url\');
add_filter(\'post_link\', \'rewrite_blog_url\');

相关推荐

我怎样才能在没有特定短语的情况下获得WordPress slug?

我得到了这个密码:<?php echo basename(get_permalink()); ?> 我得到了当前post页面的slug示例:“quot;犬类训练“;我的wordpress帖子如下:领域com/狗训练/域。com/狗玩具/域。com/狗粮/等。我需要的是弹头,但只需要部分“;玩具“"E;食品“;和;“培训”;因此,我需要摆脱;狗狗-”;部分你能帮我做这个吗。我不是程序员?谢谢