旧的结构是:
/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:
- Initial request:
http://wpsite/2007/02/this-is-a-test/
- 1st redirect:
http://wpsite/?name=this-is-a-test
- 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状态:
已经301重定向到了新的固定链接。
如果rewrite里面最后写的是 [R,L],则检测是302重定向。
不懂rewrite语法真麻烦,看来要建站就得好好学下apache。如果会的话,这种情况应该是分分钟的事情。
把?换成$也可以,另外测试了archives前面什么都不加,也是可以的,但是如果写成 /archives/...,就会返回404了