最新消息:

nginx下由/%postname%/rewrite到/%postname%.html写法

Linux运维 大步 2130浏览 0评论

网站修改固定链接后,作成伪静态的,但是发现网站的一些链接打不开,以前网上看到过wordpress修改固定链接后导致404的文章,但是那个rewrite规则不包含我这种情况,只好自己添加规则了。以前采用的是/%postname%/             现在采用的是/%postname%.html         ,赶巧的是谷歌这坑爹的货对网站的缓存页面还是以前的链接方式,自然打开我网站的时候会提示404页面,没办法自己只能去写nginx的重写规则,nginx的rewrtie规则和apache的差不多,一些规则一大堆,去google找了写参考资料,

例如,将www.ksharpdabu.info/linuxserver/       转到     www.ksharpdabu.info/linuxserver.html

修改重定向如下,因为我使用的是军哥的lnmp,所以,wordpress的伪静态规则在  wordpress.conf中,打开该文件,修改http://www.dabu.info/?p=1559

        location / {
            if (!-d $request_filename){
                rewrite ^/(.*)(\/)$ http://$host/$1.html permanent;
        }

if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
rewrite (.*) /index.php;
}

}

切记用黄色加亮的那段正则表达式是在break的前面,否则,如果你放到后面,则不会起作用的。因为先break,则不会继续执行下面的语句了,所以必须放到break的前面

解释加量的语句:http://www.dabu.info/?p=1559

1.if (!-d $request_filename)

  • 表示判断请求的是不是目录,不是就执行{}里面的语句

2.rewrite ^/(.*)(\/)$ http://$host/$1.html permanent;

  • rewrite表示执行重写,^/表示已 /开始,后面的(.*)表示任何字符,因为有多个变量,所以用括号包起来。在我这个例子中,(.*)就是表示linuxserver
  • (\/)$表示是否是以  /   结尾的,学过编程的都知道在   \/       中\表示转义字符
  • $host就表示域名,我的就是www.ksharpdabu.info
  • $1表示第一个用括号括起来的内容,这里就是指(.*),也就是linuxserver

修改好nginx.conf后重启nginx,在测试,以前打开踢死404的页面成功跳转到了现在的链接地址了。

 

 

可以参考下以下文章:

转载请注明:大步's Blog » nginx下由/%postname%/rewrite到/%postname%.html写法

    • 中文的越短越好。/%post_id%.html
      英文的,就是平%postname%.html
      其实,你可以随时改的。

      • 我一直用/%postname%/ 后来看说%postname%.html好我就改了 现在不知道这两种哪个好,后者改了之后收录慢??给点意见!

        • 是百度收录慢吧?谷歌还是很快的。你加html就是伪静态,百度和谷歌都不是很在意 现在伪静态的影响没以前那么大了。你也可以改成短的,看效果如何,不行再改短的 ,反正都能随时改。而且有时候 seo有时候靠试。我个人觉得vps的速度对百度收录影响也大 ,文章内容也才是重要的。

  1. /%postname%.html
    重定向到
    /%category%/%post_id%.html
    这个该怎么写?nginx
    我试了网上其他的说法都不行,顺着路就来到这了,希望可以邮箱admin@pshelp.cn

SiteMap