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文件导入产品)所以我不能只改变生产网站上的永久链接结构。
任何帮助将不胜感激
答案 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]