WordPress固定链接修改后,文章帖子出现HTTP 404的错误,找不到网页。例如我的博客之前使用的固定链接为/2018/01/wordpress.html,但现在想改成/wordpress/wordpress,直接修改新链接可以起效果,但是通过之前的链接访问全部是404,找不到文章。这对搜索引擎的收录肯定不好,所以想把以前的链接全部301重定向到新的链接上去~
Nginx配置
如果是第一次修改固定链接就找不到,那么是因为没有在Nginx中加入对应的rewrite规则,修改对应的配置文件,加上如下配置即可:
location / {
#省略其他配置
if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
rewrite (.*) /index.php;
}
}
修改固定链接
如果是跟我一样,修改了固定链接,由原本的https://www.flyzy2005.com/2017/12/build-shadowsocks-on-vps.html,修改成了https://www.flyzy2005.com/fan-qiang/shadowsocks/build-shadowsocks-on-vps,那么需要在functions.php中加入对应的重定向规则,代码如下:
#固定链接301重定向
$rewrite_config = array();
$rewrite_config['highpriority'] = true;
$rewrite_config['rewrite'] = array();
$rewrite_config['oldstructure'] = "/%year%/%monthnum%/%postname%.html";
function wpdaxue_pm_the_posts( $post ) {
global $wp;
global $wp_rewrite;
global $rewrite_config;
$rewrite_config['rewrite'] = $wp_rewrite->generate_rewrite_rule( $rewrite_config['oldstructure'], false, true, true, true );
if ( $post != null && is_single() && $rewrite_config['oldstructure'] != $wp_rewrite->permalink_structure ) {
if ( array_key_exists( $wp->matched_rule, $rewrite_config['rewrite'] ) ) {
// ok, we need to generate a 301 Permanent redirect here.
header( "HTTP/1.1 301 Moved Permanently", true, 301 );
header( 'Status: 301 Moved Permanently' );
$permalink = get_permalink( $post[0]->ID );
if ( is_feed() ) {
$permalink = trailingslashit( $permalink ) . 'feed/';
}
header( "Location: " . $permalink );
exit();
}
}
return $post;
}
function wpdaxue_pm_post_rewrite_rules( $rules ) {
global $wp_rewrite;
global $rewrite_config;
$oldstruct = $rewrite_config['oldstructure'];
if ( $oldstruct != null && $oldstruct != $wp_rewrite->permalink_structure ) {
$rewrite_config['rewrite'] = $wp_rewrite->generate_rewrite_rule( $oldstruct, false, true, true, true );
if ( $rewrite_config['highpriority'] == true ) {
return array_merge( $rewrite_config['rewrite'], $rules );
} else {
return array_merge( $rules, $rewrite_config['rewrite'] );
}
}
return $rules;
}
其中$rewrite_config[‘oldstructure’]改成你对应的原固定链接即可实现重定向~
注:修改functions.php后,需要在固定链接里点击保存更改刷新配置!!!


相关文章