日志《数据丢失后的记录》记录了本站的故障情况,那次努力修复,损失不大,这几天发现原来搜索引擎抓取的链接地址是老的跟现在的不一样,查过资料后决定用301跳转方式解决,查询资料中得知301跳转能够跳转域名,所以第一步先把域名跳转了

首先要找到网站根目录下的.htaccess文件,它通常是隐藏文件,所以大家要仔细查找

然后用编辑器打开,在文件最后一行开始编辑

接下来所有跳转的命令都是在这两个标签内编辑,先进行域名跳转

RewriteEngine On
RewriteCond %{HTTP_HOST} www.needis.me$ [NC]
RewriteRule ^(.*)$ http://needis.me/$1 [R=301,L]
RewriteCond %{HTTP_HOST} www.yourneedisme.com$ [NC]
RewriteRule ^(.*)$ http://needis.me/$1 [R=301,L]
RewriteCond %{HTTP_HOST} yourneedisme.com$ [NC]
RewriteRule ^(.*)$ http://needis.me/$1 [R=301,L]

然后解决失效的连接,从搜索引擎查到失效连接数最大的几个,写了最简单的跳转

RedirectMatch 301 ^/2010/12/09/647/$ /?p=302$2
RedirectMatch 301 ^/2010/12/21/1609/$ /?p=339$2

RedirectMatch 301 ^/1/$ /?p=1$2
RedirectMatch 301 ^/2010/12/13/307/$ /?p=307$2
RedirectMatch 301 ^/2010/12/13/313/$ /?p=313$2
RedirectMatch 301 ^/2010/12/21/336/$ /?p=336$2
RedirectMatch 301 ^/2010/12/23/345/$ /?p=345$2

大家可以发现,我写跳转前面两行ID是不一致的,后面几行,ID是一致的,那么后面几行是否可以简化写呢?当然可以

RedirectMatch 301 ^/(.+)/(.+)/(\d+)/$ /?p=$3

最后修复author、category、tag

Redirect /author /?author=
Redirect /category /?cat=
Redirect /tag /?tag=

补充

如何重定向以及关于正则表达式的使用apache的文档讲的很详细
http://httpd.apache.org/docs/2.2/rewrite/rewrite_intro.html
http://httpd.apache.org/docs/2.2/urlmapping.html

^   –> 匹配字符串的开始
$   –> 匹配字符串的结束
\s  –> 匹配任意的空白符
\w –> 匹配字母或数字或下划线或汉字
\b  –> 是正则表达式规定的一个特殊代码代表着单词的开头或结尾,也就是单词的分界处。
\d  –> 匹配一位数字
\W(大写) –> 匹配任意不是字母,数字,下划线,汉字的字符
\S (大写) –> 匹配任意不是空白符的字符
\D (大写) –> 匹配任意非数字的字符
\B(大写) –> 匹配不是单词开头或结束的位置
” . “   –> 匹配除了换行符以外的任意字符
” * “   –> 它代表的不是字符,也不是位置,而是数量——它指定 * 前边的内容可以连续重复使用任意次以使整个表达式得到匹配。” .* “连在一起就意味着任意数量的不包含换行的字符
” + “   –> 是和 ” * ” 类似的元字符,不同的是 * 匹配重复任意次(可能是0次),而 + 则匹配重复1次或更多次。
” ? “   –> 重复零次或一次
” – “  –> 不是元字符,只匹配它本身 连字符(减号)