Nginx 设置 WordPress 自定义固定链接后的地址不带html跳转.html

萌新网在最初的时候由于没有经验,最早使用了阿里云的虚拟主机,Wordpress设定了数字型的固定链接,由于这种结构不能使用伪静态,所以后来在网站流量上去之后就发现网站速度变得很慢,于是更换了伪静态,添加了自定义结构.html,这个时候原来的文章并不能进行自动跳转,变用了跳转插件进行301逐个页面进行跳转,最终发现此插件很耗费主机资源,每天虚拟主机都好宕机一次,一狠心换了阿里云的ECS,之后死机问题没有了,一直用着插件大概半年,便决定撤去插件,然而在插件撤掉后我发现大量的404页面,也就是之前不带.html的页面还是在被搜索引擎收录,头一下就懵了,再把插件装回来吗?Google了好多资料,发现其实可以写跳转规则,写了好多次,终于发现了一篇很好的文章,成功的将所有不带.html的页面完全跳转到了现在的页面,即https://www.macxin.com/archives/274打开自动跳转到https://www.macxin.com/archives/274.html下面为步骤和代码;


注:源文章转载自sumile博客

在使用nginx之前,为了实现伪静态,我在wordpress后台设置里面的固定链接中,将“常用设置”设置为了固定链接,并在里面默认值(/ archives /%post_id%)的基础上在后面添加了名“.html”

 

 

后来使用了nginx之后,突然又发现.html不能正常打开了,显示的是nginx的404,没多想着急忙慌的就在固定链接里面选择了“数字型”,倒是没问题了

可是我之前的外链怎么办啊?

以前在其他地方留文章的外链留下的可都是带html的,总不能放弃这些文章吧

于是就在nginx里面配置了一下转发规则,将符合规则的.html路径对应到数字型的路径下,就可以正常访问了。

下面是两个我配置过的访问规则,我自己试了试,是可以的:

 if ($request_filename ~ (.*)/archives/(.*).html$){
          rewrite (/archives/.*).html $1 permanent;
       }

这一条,适合于后缀为”.html” 的转成去掉 html 的,如:https://www.macxin.com/archives/274.html打开自动跳转到https://www.macxin.com/archives/274

  if ($request_filename ~ (.*)/archives/[0-9]*$){
           rewrite (/archives/[0-9]*$) $1.html permanent;
       }

而这一条,适合给原来的链接添加后缀 html 的,如https://www.macxin.com/archives/274打开自动跳转到https://www.macxin.com/archives/274.html

对于以上两条,如果你的 url 中不是如我一样的“/archives/”的话,那么将这个修改为你自己的部分(萌新网就是用的这一条)

另外,你要转成什么样子的,就在 固定链接 里面的常用设置那里选择什么样子的:如我最后要转成”https://sumile.cn/archives/1688.html”,那么我在这里就应该选择 自定义链接,然后里面要填写 “/archives/%post_id%.html”

。如果我要转成”https://www.macxin.com/archives/274”,那么我选择“数字型”或者在 “自定义链接” 里面填写 “/archives/%post_id%”就可以了

各位根据自己的需要自己修改就好了。

下面我再发一个我完整的配置

server {
    listen       80;
    server_name  sumile.cn www.sumile.cn ;
    autoindex off;
    index  index.php;
 
    location / {
        root   C:wampwwwblog;
        index  index.php;
       #if ($request_filename ~ (.*)/archives/(.*).html$){
       #   rewrite (/archives/.*).html $1 permanent;
       #}    
       if ($request_filename ~ (.*)/archives/[0-9]*$){
           rewrite (/archives/[0-9]*$) $1.html permanent;
       }           
        if (-f $request_filename/index.php){
            rewrite (.*) $1/index.php;
        }
        if (!-f $request_filename){
            rewrite (.*) /index.php;
        }
        if (-f $request_filename/index.html){
            rewrite (.*) $1/index.html break;
        }
    }
    
    location ~ .php$ {
      root           C:wampwwwblog;
      fastcgi_pass   127.0.0.1:9000;
      fastcgi_index  index.php;
      fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
      include        fastcgi_params;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header REMOTE-HOST $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

[danger]配置请按照自己的实际情况改动,不能生搬硬套,比如其中的网址都应该改为自己的才能使用![/danger]

修改完跳转规则后重新启动nginx使其的配置生效即可;

[success]注:注意保存自己的原来配置,防止配置不合适造成的网站不能访问等问题,有备无患。[/success]

暂无评论

相关推荐