it-swarm.cn

为帖子,页面,类别和图像URL创建301重定向?

我担心这可能要求太多,所以如果是这样,请随时告诉我另一个学习的地方。

帮助重定向

我正在清理一个开发不好的网站并从子目录迁移wordpress。我花了好几个小时试图围绕重定向和正则表达式的后勤工作。我想我已经掌握了它,但我非常感谢确认我做得对,以及有关最佳实践的建议。如果有人知道任何有关如何示例的好教程,我也会很感激。

如果有人知道 真的 简单的插件,我会非常感激。我一直在看Redirections插件,但发现它很混乱(头痛!)。无论如何,下面我的想法(来源跟着=>然后是目标)是我从重定向说明和截图以及我搜索过的其他教程中收集到的。我很确定无论我是将它们直接放在.htaccess文件中还是使用Redirections或其他插件,它们都适用?

所以,这就是我想要完成的事情以及我认为需要做的事情:

  1. 将Wordpress从子目录移动到根目录:

    /wp /(.*)=> /$1
    
  2. 对于当前在根目录中的子目录中的所有页面,我想删除和/或将一堆页面组合到一个顶级页面中:

    /products-directory /(.*)=>/products-top-level-page 
     
    /about-directory /(.*)=>/about-top- level-page 
     
    /services-directory /(.*)=>/services-top-level-page 
    
  3. 对于与特定模式匹配的一堆顶级页面,我希望将它们引导到特定类别,例如文件名都以相同的两个单词开头,如下所示:same-Word-variation-variation.html我希望它们保留现有的文件名 - 如果我将我的永久链接设置为以`.html`结尾,这将起作用, 我相信:

     /同一字(。*)=> /newcategory/$1
    

    如果我没有以`.html`结尾的永久链接,我将如何创建规则? (我想我看到了!是“不是”角色,但不知道如何在这里使用 - 是吗):

     /同一字(。*)=> /newcategory/$1!\。[。_____。]
  4. 然后,一旦我识别并重定向上面的特定页面,我将删除所有其余的(垃圾)并想要将用​​户发送到主页(或者可能是随机的帖子?)。

    那么,这里有两个问题:

    1. 如何创建“除了已经重定向的文件以外的所有内容,执行此操作”的规则

    2. 我如何阻止该规则应用于我从现在开始创建的新页面和帖子?

    一个想法是,通过删除,我将找到404页面找不到,所以我应该为404页面本身创建规则?那是我想做的吗?

    正如我所说,该网站已经发展得很糟糕(客户指示人们只是“抛出一个页面”而不考虑正确的架构,搜索引擎优化等) - 它实际上没有排名或外部/后退链接担心,但我想从SEO和正确的发展角度理解最好的方法。

  5. 另外,我应该将现有图像等移动到wp-content目录中还是将它们保留在现有的子目录中?我倾向于真正去“清扫” - 摆脱一切似乎不整洁的东西,但我不确定这是否会比它的价值更多......

提前感谢任何和所有指导。

5
CJN

@CJN:

第一个问题,移动WordPress目录的处理方式与其他目录不同。

将WordPress从子目录移动到根:

进入/wp-config.php并将以下内容添加到定义中(当然使用客户端的域而不是example.com):

define('WP_SITEURL', 'http://example.com');
define('WP_HOME',    WP_SITEURL);

301使用template_loaderwp_safe_redirect()重定向

您可以通过修改.htaccess来解决大多数其余问题,因为@ Kau-Boy显示了如何,或者 您可以在PHP 中执行此操作。 WordPress有一个template_redirect钩子,您可以使用它与wp_safe_redirect()函数一起使用301 HTTP状态代码重定向。正如你所看到的那样,剩下的就是PHP代码和一些正则表达式魔法。你可以将这些代码放在主题的functions.php文件中的任何位置:

add_action('template_redirect','my_template_redirect');
function my_template_redirect() {
  $redirect_to = false;
  list($url_path,$params) = explode('?',$_SERVER['REQUEST_URI']);
  $path_parts = explode('/',trim($url_path,'/'));
  switch ($path_parts[0]) {
    case 'products-directory':
      $redirect_to = '/products-top-level-page';
      break;
    case 'about-directory':
      $redirect_to = '/about-top-level-page';
      break;
    case 'services-directory':
      $redirect_to = '/services-top-level-page';
      break;
    default:
      if (preg_match('#same-Word(.*)#',$path_parts[0],$match)) {
        $category = str_replace('.html','',$match[1]);
        $redirect_to = "/newcategory/{$category}";
      } else {
        // Do whatever else you need here
      }
  }
  if ($redirect_to) {
    wp_safe_redirect($redirect_to,301);
    exit();
  }
}

考虑可用性而不仅仅是SEO?

我会问你是否真的想做#2? IMO使得网站对用户的可用性低于仅针对感知搜索引擎优化的网站(以及作为 这个群体的创始人和一次性共同组织者 我不是SEO新手。)我很多而是看到你只是从URL路径的第一段中删除"-directory"。无论如何,JMTCW。

生成404页面?

如果您需要发出404,可以使用标题:

header("HTTP/1.0 404 Not Found");
exit;

但是我觉得那不是你想做的,对吗?我认为您可以通过修改上面的PHP函数并使用301响应HTTP请求来实现您需要的任何重定向逻辑,对吧?

将图像导入媒体库和301重定向

您可以将它们移动到媒体库中,这样可以让您继续管理它们。这是一个可能有帮助的插件(虽然我不确定它是否与3.0一起工作;如果不是,它可能是一个很好的代码库,无论如何):

硬编码图像URL 301使用阵列重定向

然后,因为它将是 一次性的东西 你可以简单地 将你的图像URL硬编码成一个数组 并使用它们来匹配你的重定向功能。从上面的代码修改switch语句中的默认值可能如下所示:

default:
  if (preg_match('#same-Word(.*)#',$path_parts[0],$match)) {
    $category = str_replace('.html','',$match[1]);
    $redirect_to = "/newcategory/{$category}";
  } else {
    $images = array(
      '/images/image1.jpg' => '/wp-content/uploads/2010/08/image1.jpg',
      '/images/image2.jpg' => '/wp-content/uploads/2010/08/image2.jpg',
      '/images/image3.jpg' => '/wp-content/uploads/2010/08/image3.jpg',
      );
    if (in_array($url_path,$images)) {
      $redirect_to = $images[$url_path];
    } else  {
      // Do whatever else you need here
    }
  }

使用preg_match()到301按URL模式重定向图像

当然,如果您的图像URL遵循一种模式,您可以使用preg_match()来简化大部分或全部图像数组,如下所示:

if (preg_match('#^/images/(.*)$#',$url_path,$match)) {
  $redirect_to = "/wp-content/uploads/2010/08/{$match[1]}";
}

希望这可以帮助?

8
MikeSchinkel

有一个插件可以从一个永久链接更改为另一个,但我很确定这不足以满足您的需求。您将不得不使用一些.htaccess重写规则。我试着为你提供一些例子(不确定它们是否都正确)。将所有这些行包含在服务器根目录中名为“.htaccess”的文件中。超出wordpress规则:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
# your rules start here. Keep the following lines that has been produced by wordpress
RewriteBase /
RewriteRule wp/(.*)$ /$1 [R=301]
RewriteRule /products-directory/(.*)$ /products-top-level-page [R=301]
RewriteRule /about-directory/(.*)$ /about-top-level-page [R=301]
RewriteRule /services-directory/$ /services-top-level-page [R=301]
RewriteRule /same-Word(.*)$ /newcategory/$1 [R=301]

标志[R = 301]将告诉客户端浏览器或搜索引擎它是永久重定向。

您可能希望更新wordpress数据库中的所有永久链接。我写了一篇 关于在数据库中更新字符串的文章 。不幸的是,我还没有翻译这篇文章。但查询应该是清楚的,否则只需使用MySQL文档。

1
2ndkauboy

我用它: 简单的301重定向 插件 - 之前用过几页,我很快就将我的网页设计网站与我的WP文件中的所有文件和文件夹一起移动。

0
Steve Shearer