wordpress博客 换文章固定链接之后 301跳转

  • A+
所属分类:剑歌随笔

博客之前用固定链接是%post_id%.html

链接形式:http://www.zhangjianqun.com/1.html

为了以后更改 改成了 更改成了/%category%/%post_id%.html

链接形式:http://www.zhangjianqun.com/cmo/1.html

重定向伪静态规则 RedirectMatch 301 ^/(\d+).html$ /(.+)/$1.html
目标url:    http://www.zhangjianqun.com/cmo/1.html

我网站的伪静态规则

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteBase /

RewriteRule ^index\.php$ - [L]

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . /index.php [L]

</IfModule>
RedirectMatch 301 ^/(\d+).html$ /(.+)/$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>

# END WordPress

下面详细讲解下:

wordpress一旦更改了固定链接,那么多的死链对于网站来说绝对是个麻烦,使用插件终究不是个办法,我还是用.htaccess来实现吧。

谈到.htaccess,就不得不说正则表达式中的一些符号解释:

(.+) 对应的是任意字符(包括汉字、英文字母等)(\d+)对应的是任意数字(仅仅是阿拉伯数字)$1 $2 $3 是前面出现过的变量的再次引用

  1. 简单的301重定向示例

    1.1.示例一

    更改http://www.zhangjianqun.com/%year%/%monthnum%/%day%/%postname%/

    http://www.zhangjianqun.com/%postname%.html

    重定向语句:RedirectMatch 301 ^/([0-9]+)/([0-9]+)/([0-9]+)/(.*)/$ /$4.html

    RedirectMatch 301 ^可以理解为语句正式开始,中间三个([0-9]+)可以理解为分别对应%year%/%monthnum%/%day%,(.*)可以理解为最后的文章名称或者ID,这四个变量分别可以赋予编号$1,$2,$3,$4。(.*)和$4.html之间的那个$可以理解为老网址和新网址之间的分割。

    我们要修改的,就是把地址中的日期全都不要了,只要第四部分的文章名,然后在文章名后面加上.html来实现伪静态

    也就是说,那三个([0-9]+)都不要了,只要(.*)部分,而(.*)对应于$4,所以现在的网址只写上$4.html就行了,也就是以前的(.*).html

    1.2.示例二

    /%post_id%修改为/%category%/%post_id%.html

    因为%post_id%肯定是数字,而上面说过,正则表达式中(\d+)对应任意数字,所以以前的网址可以写成/(\d+)

    而%category%是分类,肯定是字符,不管是汉子还是字母,正则表达式中(.+) 对应的是任意字符(包括汉字、英文字母等),所以新的网址可以写成/(.+)/(\d+).html

    在原网址中,%post_id%即(\d+)对应于$1,所以新网址为/(.+)/$1.html

    然后用$将新旧网址连接起来,写成301重定向语句,即为:

    RedirectMatch 301 ^/(\d+)$ /(.+)/$1.html

  2. 2

    我是怎么修改的?

    我是从* /archives/123的形式改为*/article/$1.html的形式,语句如下:

    RedirectMatch 301 ^/archives/(\d+)$ /article/$1.html

  3. 3

    该如何写自己的重定向语句

    首先:你要弄清楚自己的原网址每一部分是什么形式,数字?字符?然后分别用上面的正则表达式符号来对应,(.+) 对应的是任意字符(包括汉字、英文字母等),(\d+)对应的是任意数字(仅仅是阿拉伯数字)

    因为文章名称中可能含有字母,可能含有数字,所以要用(.*)来对应,(.*)表示任意的东西

    然后:将原网址每一部分分别对应,按照顺序,依次用$1/$2/$3/$4/$5来对应

    再然后:写出新网址,按照写原网址的规则来写,不再累赘

    最后:用$来连接新旧网址,写成301重定向语句(新网址中与原网址相同的部分要用符号来代替,用$1、$2、·····来代替)

    注意,$和后面的新网址之间有一个空格。而且,如果原网址最后有/的话,在$之前也必须有一个/

  4. 4

    使用301重定向该注意什么?

    1、有个问题,wordpress的.htaccess文件被自动更改(自动还原)wordpress会自动修改.htaccess文件中# BEGIN WordPress和# END WordPress的内容,即使你并没有修改过固定连接。只要点击了“固定连接”,.htaccess文件中# BEGIN WordPress和# END WordPress之间的内容就会被更改,自动还原。这是wordpress的一个令人讨厌的问题。

    怎么解决呢?最好的解决方法是:把自己添加在.htaccess中的语句,写在# BEGIN WordPress和# END WordPress之外,比如我的:

    RedirectMatch 301 ^/archives/(\d+)$ /article/$1.htmlRedirectMatch 301 ^/(\d+)$ /article/$1.html# BEGIN WordPress<IfModule mod_rewrite.c>RewriteEngine OnRewriteBase /RewriteRule ^index\.php$ – [L]RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule . /index.php [L]</IfModule># END WordPress

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: