Php 如何将旧的Wordpress博客文章URL重定向到新的

Php 如何将旧的Wordpress博客文章URL重定向到新的,php,wordpress,.htaccess,redirect,mod-rewrite,Php,Wordpress,.htaccess,Redirect,Mod Rewrite,我的Wordpress站点的博客帖子URL通常如下所示: http://example.com/some-random-blog-post-name http://example.com/other-random-blog-post-name http://example.com/in-case-you-dont-get-the-point-theyre-all-different 在我的新Wordpress网站上,我希望他们生活在他们所属的/blog/子目录中: http://example

我的Wordpress站点的博客帖子URL通常如下所示:

http://example.com/some-random-blog-post-name
http://example.com/other-random-blog-post-name
http://example.com/in-case-you-dont-get-the-point-theyre-all-different

在我的新Wordpress网站上,我希望他们生活在他们所属的/blog/子目录中:

http://example.com/blog/some-random-blog-post-name

这方面的棘手之处在于,旧的URL没有遵循任何模式,因此我认为我需要匹配任何无法识别的内容。像这样的事情几乎奏效了

# Redirect unmatched blog posts to /blog/*
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !blog
RewriteCond %{HTTP_HOST} ^example.com [NC,OR]
RewriteRule ^(.*)$ https://example.com/blog/$1 [L,R=301,NC]
</IfModule>
#将不匹配的博客文章重定向到/blog/*
重新启动发动机
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写cond%{REQUEST_URI}!博客
RewriteCond%{HTTP_HOST}^example.com[NC,OR]
重写规则^(.*)$https://example.com/blog/$1[L,R=301,北卡罗来纳州]
…但它与Wordpress自己的重写规则相冲突,并破坏了所有其他应原封不动地通过的网站页面

那么,我如何实现以下目标:

example.com/some random post
301-->
example.com/blog/some random post
example.com/other random post
301-->
example.com/blog/other random post


example.com/contact/
-->(无重定向)

在主题的
404.php
(或404处理程序)中,您可以在文件开头使用此代码段:

<?php

$url = $_SERVER['REQUEST_URI'];

if (stripos($url, "/blog/", 0) !== 0) {
   header("Location: " . "/blog" . $url);
   exit;
}

// rest of the 404 code
?>


如果我是你,我会创建一个新的文件“博客”“在我的ftp上,我会将所有旧的wordpress剪切并粘贴到这个新文件中。这样,您不需要在.htaccess中更改任何内容,重定向将在wordpress bo中自动完成

什么样的URL模式应该重定向到
/blog
,什么不应该重定向?@anubhava我想上面的问题已经解释过了。旧博客文章没有特定的模式,因为它们没有子目录前缀。因此,基本上我们需要重定向任何不是现有Wordpress页面的内容。在这种情况下,mod_rewrite不是解决方案。它需要在WP中处理。@anubhava我洗耳恭听。你的建议是什么?我不太明白你的建议。你能详细说明一下结果会是什么吗?是的,这也是我一直在想的。。。我知道将代码粘贴到404.php模板文件中是可行的,但我认为如果该逻辑存在于functions.php中,那么ti会更干净。。。你知道404请求有一个钩子/过滤器吗?实际上我不是WP专家。有一个名为
is_404()
的函数,允许您在
header.php
index.php