linux+apache环境下通过修改.htaccess实现网站内页301重定向详解
网站出现死链是很难避免的事情,例如对栏目页或文章页路径进行了调整,如果想保留之前的链接就要做301跳转。但是很多朋友都只知道做网站首页301重定向,对网站内页301重定向知之甚少,下面内容将会详细介绍如何通过修改.htaccess文件来实现网站内页301重定向。
首先我们来了解几个简单符号所代表的含义:
1、(.*) 代表任意字符(包括汉字、英文字母等)
2、(\d+)代表是任意数字(仅仅是阿拉伯数字)
3、$1、 $2 、$3 、$4表示的是对前面出现的变量的引用(你理解这个意思就行了)
了解完之后我们进入正题
第一种、简单的数字形式链接做301跳转
例如:
把网址①http://www.linshuhaos.com/2017/11/27/seo/ 重定向为网址②http://www.linshuhaos.com/seo.html,该怎么写
说明:
网址①可写在这种形式 http://www.linshuhaos.com/%year%/%monthnum%/%day%/%postname%/
网址②可写成这种形式 http://www.linshuhaos.com/%postname%.html
其中/%year%/%monthnum%/%day%就是网址①中的三层路径,分别表示的是“年、月、日”3,%postname%是网址②中的一层路径。现在我们需要去掉“年、月、日”这几个多余的层级,直接变成http://www.linshuhaos.com/%postname%.html这种形式。
重定向语句就可以写成:
RedirectMatch 301 ^/([0-9]+)/([0-9]+)/([0-9]+)/(.*)/$ /$4.html
解释:
1、RedirectMatch 301 ^可以认为是规则的开始;
2、中间的三个([0-9]+)分别代表数字“%year%、%monthnum%、%day%”;
3、 (.*)代表最后文章的名称或者ID即“%postname%”;
这四个变量可以赋予用$1、 $2 、$3 、$4来代替,而(.*)和$4.html中间的$可以理解为新老网址的连接符号(注意:$ 和/$4.html之间一定要有一个空格)。
通过上面那个重定向语句就可把复杂的网址①变成简单的网址②,其对应关系 可以用下图来解释更直接明了
第二种、字符形式类链接做301跳转
例如:
把网址③http://www.linshuhaos.com/123 重定向为网址④http://www.linshuhaos.com/seo/123.html,该怎么这写
说明:
网址③可以写成这种形式 http://www.linshuhaos.com/%id%
网址④可以写成这种形式http://www.linshuhaos.com/%postname%/%id%.html
重定向语句可以写成:
RedirectMatch 301 ^/(\d+)$ /(.*)/$1.html
解释:
1、前面我们说过(\d+)代表是任意数字,所以前面的数字变量“%id%”可以写成(\d+);
2、“%postname%”是名称,是字符串,而任意字符(包括汉字、英文字母等)对应的表示符号是(.*);
其中数字变量“%id%”即(\d+)可用$1来代替,所以我们想把网址③变成网址④的形式,只需要在网址③中的“%id%”加多一层路径 即可,而“%id%”可以$1来表示,所以就写成/(.*)/$1.html
后面三种重定向语句跟前面两种做法,就不一一介绍,自己按照前面的说法好好研究下,应该很好理解。
三、
http://www.linshuhaos.com/postname/lizi/ 重定向为 http://www.linshuhaos.com/postname/lizi.html
重定向语句:
RedirectMatch 301 ^/(.*)/(.*)/$ /$1/$2.html
四、http://www.linshuhaos.com/lizi/ 重定向为 http://www.linshuhaos.com/archives/lizi.html
重定向语句:
RedirectMatch 301 ^/(.*)/$ /archives/$1.html
五、http://www.linshuhaos.com/lizi 重定向为 http://www.linshuhaos.com/lizi.html
重定向语句:
RedirectMatch 301 ^/(.*)$ /$1.html
怎么才能快速准确地写好你的重定向语句?
1、首先你要弄清楚自己原网址中需要改变的部分是什么形式,是数字还是字母,该 用正规表达式中的哪些符号来代替;
2、弄清重定向前的网址有多少层路径,重定向后网址有多少路径;
3、重定向语句
RedirectMatch 301 ^/(.*)$ /$1.html ,中蓝色的部分一定得有一个空格,符号$是用来链接新旧网址的
4、上面的代码在.htaccess文件中,也可以放在这个代码<IfModule mod_rewrite.c>.....</IfModule>之外,比如这样:
RedirectMatch 301 ^/(\d+)$ /$1.html # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>