更换WordPress固定链接结构(无需插件)

旧的结构是:

/archives/%year%/%monthnum%/%day%/%post_id%

很长很复杂,修改个简单的:

/archives/%post_id%.html

或者

/article-%post_id%.html

改完之后,用旧的链接结构肯定不能访问了。先去百度修改方法,用的搜索词是“wordpress更换固定链接结构”,也不知道是不是因为搜索词有误,搜到的总是不符合要求,我要的是修改固定链接结构后原链接结构跳转到现在的链接结构,结果搜到的结果不是说用插件就是修改已经存在的.htaccess,一看修改结果,没有任何页面重定向的语句,明明就是wordpress默认的.htaccess。
不过也找到了一些有启示作用的文章:

旧的固定链接形式为:

/item/%post_id%.html

更新为:

/a/%postname%.html

这样,诺豆网的日志URL将更为人性化,自由度也更高了!

同时,问题也来了,由于日志URL的变化,之前收录或被转载的日志链接也将失效,为了避免流量的损失和各位童鞋访问的友好性,基于CentOS下的Nginx环境,做了个301永久重定向,希望各位蜘蛛反应给力点儿哈!!

具体使用的代码如下:

rewrite ^/item/(.*)$ /a/$1 permanent;

当然你也可以分开写,例如:

rewrite ^/item/([0-9]+).html$ /a/$1.html permanent; #文章
rewrite ^/item/category/(.*)$ /a/category/$1 permanent; #目录分类
rewrite ^/item/tag/(.*)$ /a/tag/$1 permanent; #tag分类
rewrite ^/item/date/(.*)$ /a/date/$1 permanent; #日期分类

ps. 其中permanent表示返回301永久重定向,游览器访问地址会显示跳转后的URL地址!

另需注意:上述301重定向代码一定要放在wordpress伪静态规则之前,否则不生效!给个完整示例吧!

以上引自:http://www.kuqin.com/zhanz/20120401/319558.html
这个是在Nginx下面的。

 

Permalink Structure /%year%/%monthnum%/%postname%/ /archives/%post_id%.html
Redirect To /?name=%postname% /?p=%post_id%
Mod_Rewrite Rule RewriteRule /[0-9]{4}/[0-9]{2}/([^/]+)/? /?name=$1 [R,L] RewriteRule /archives/([0-9]+)\.html /?p=$1 [R,L]

For example, we are changing from /%year%/%monthnum%/%postname%/ to/%category%/%postname%.html, and a visitor requesting /2007/02/this-is-a-test/would get:

  1. Initial request: http://wpsite/2007/02/this-is-a-test/
  2. 1st redirect: http://wpsite/?name=this-is-a-test
  3. 2nd redirect: http://wpsite/foo-bar/this-is-a-test.html

以上引自:http://scott.yang.id.au/2007/02/change-wordpress-permalink/
作者的意思大概是先定向到/?p=post_id的动态页面,在定向到新页面,按照这个方法设置之后,依然是404页面。不过思路应该是对的。
无奈去找插件,可是不知道怎么回事,装好了Permalink Redirect设置里面却找不到插件选项。又装了一个相关插件也是这样。
烦躁的又去改rewrite规则。
仔细看了无效的规则,对比discuz的rewrite规则,发现自己写的规则貌似少了个 ^ (就是archives前面的那个 ^) ,增加之后,居然可以实现重定向了!代码如下:

RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^archives/[0-9]{4}/[0-9]{2}/[0-9]{2}/([0-9]+)? article-$1.html [R=301,L]

用站长工具检测HTTP状态:
HTTP状态查询

 

 

 

 

 

 

 

 

 

 

 

已经301重定向到了新的固定链接。
如果rewrite里面最后写的是 [R,L],则检测是302重定向。
不懂rewrite语法真麻烦,看来要建站就得好好学下apache。如果会的话,这种情况应该是分分钟的事情。

One thought on “更换WordPress固定链接结构(无需插件)

  1. RewriteCond %{QUERY_STRING} ^(.*)$
    RewriteRule ^archives/[0-9]{4}/[0-9]{2}/[0-9]{2}/([0-9]+)$ article-$1.html [R=301,L]
    

    把?换成$也可以,另外测试了archives前面什么都不加,也是可以的,但是如果写成 /archives/...,就会返回404了

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注