htaccess重定向 - 数百个帖子

时间:2016-07-08 15:34:37

标签: wordpress .htaccess redirect

Wordpress重定向

我的客户有一个WP网站,其永久链接结构非常糟糕,数百个"产品"他们创建的页面是带有大量HTML的简单帖子。 例如:

http://www.website.com/article/sony-tv-42-inch
http://www.website.com/article/iphone-5-2-black
http://www.website.com/article/samsung-dvd-player-12455

我正在从头开始创建一个新网站,并计划为“商品”部分使用自定义帖子类型,并组织以下网址:

http://www.website.com/product/sony/tv-42-inch
http://www.website.com/product/apple/iphone-5-black
http://www.website.com/product/samsung/dvd-player-12455

由于他不想丢失任何流量或搜索引擎优化评级,我想知道几百个帖子的htaccess重定向最简单的解决方案是什么? 如果他只有十几个,我可以手动完成,但几百... 另外,请记住,这是一个干净的WP安装,主题是从头开始构建的(我在本地工作,很可能是通过CSV文件导入产品)所以我不能只改变生产网站上的永久链接结构。

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:0)

您可以轻松地从

重写
http://www.website.com/product/sony-tv-42-inch

http://www.website.com/product/sony-tv-42-inch

但是额外/将会出现问题。

正如其他一些人所提到的,你当然希望301用于搜索引擎优化目的,所以这就是我要做的事情。

第1步 - 获取当前网址

获取所有当前发布的永久链接列表。 David George对MySQL的SQL查询应该可以解决问题。

   SELECT  wpp.post_title,
        wpp.guid,
        wpp.post_date,
        CONCAT
        (
          wpo_su.option_value,
          REPLACE
          (
            REPLACE
            (
              REPLACE
              (
                REPLACE
                (
                  wpo.option_value, 
                  '%year%',
                  date_format(wpp.post_date,'%Y')
                ),
                '%monthnum%',
                date_format(wpp.post_date, '%m')
              ),
              '%day%',
              date_format(wpp.post_date, '%d')
            ),
            '%postname%', 
            wpp.post_name
          )
        ) AS permalink
  FROM wp_posts wpp
  JOIN wp_options wpo
    ON wpo.option_name = 'permalink_structure'
   AND wpo.blog_id = 0
  JOIN wp_options wpo_su
    ON wpo_su.option_name = 'siteurl'
   AND wpo_su.blog_id = wpo.blog_id
 WHERE wpp.post_type = 'post'
   AND wpp.post_status = 'publish'
 ORDER BY wpp.post_date DESC 

第2步 - 保存以供日后使用: 现在您已将该列表转储到Excel列中以供日后使用。

第3步 - 为PHP格式化: 获取所有URL并将其转储到Notepad ++或等效文件中。在Windows上点击 cntrl + H 以显示查找/替换功能。务必选择“搜索模式”' - > '扩展'

For" Find What"你应该输入 \ r \ n 并替换为'替换为'你应该输入并点击“全部替换”。

您现在应该有一个仅以逗号分隔的所有网址列表。

第4步 - 创建PHP文件:

创建一个新的PHP文件并设置:

    <?php
$urlString = "http://www.urlsample1.com/article/sony-thing-and-stuff, http://www.urlsample1.com/article/warner-brothers-stuff";

    //this will replace the word article with the word product
    $newstring = str_replace("article", "product", $urlString);
    //turns string into array
    $myArray = explode(',', $newstring);
//loops through array to find first case of - and turn it to a /
for ($i = 0; $i < count($myArray); ++$i) {
       $haystack = $myArray[$i];
       $needle = "-";
       $replace = "/";
       $pos = strpos($haystack, $needle);

        if ($pos !== false) {
          $finalstring = substr_replace($haystack, $replace, $pos, strlen($needle));
        }
    //removes common url elements
    $newShort = str_replace("http://www.urlsample1.com", "", $finalstring);
    $oldShort = str_replace("http://www.urlsample1.com/product", "/article", $myArray[$i]);
    //prints out the old and new url in .htaccess format
    print("Redirect 301 " . $oldShort . " " . $newShort . "</br>");
};

?>

第5步 - .Htaccess

上面的输出应如下所示:

Redirect 301 /product/sony-thing-and-stuff /product/sony/thing-and-stuff
Redirect 301 /product/warner-brothers-stuff /product/warner/brothers-stuff

可以放入.htaccess文件。

注意:这种方法可能会因为Apache而变得缓慢而且不是优选的,但这是我能想到的最快的方式让您的客户端在新的情况下运行。

答案 1 :(得分:-1)

对于SEO,我建议您在.htaccess中使用301 - 重定向

您可以使用regexp进行重定向。

示例:

RewriteEngine on
RewriteRule ^/users/(.*)$ http://www.example.com/profiles/$1 [R=301,L]