今天,搬迁了百蔬君博客的主机,测试的时候发现无法打开内容页,首页和分类页正常。于是按照老办法把固定链接的连接方式设置为“朴素”,即https://www.baishujun.com/?p=123,然后再切换回自定义结构“/archives/%post_id%.htm”,发现这个内容页仍然无法打开,我以为是自定义结构伪静态失效了,折腾了半天没找到问题,偶然的机会我把自定义结构设置为“/archives/%post_id%.html”,竟然打开了,也就是说自定义结构是生效的,只是说对htm失效,不支持htm的伪静态。
经过一番翻江倒海,发现了问题的根源在于wdcp。如果使用wdcp的n+a环境,并且使用了“客户端缓存”功能就会出现这个情况。
我们看下相关代码www/wdlinux/nginx/conf/vhost/baishujun.com.conf
location ~ .*\.(js|css|htm)?$ { expires 12h; }
这里设置了htm的缓存,我的理解是htm由于是伪静态,这个htm文件并不存在,但是要缓存它,所以就出错了。知道了问题所在就很好解决了,这里删除”|htm”就好了,或者关闭“客户端缓存”功能。
但是直接修改网站的配置文件总是不好的,下次如果编辑网站属性,那么这个修改就会自动被还原,那么怎么解决呢?
我的办法是这样,既然不能直接修改conf文件,那么我们就把自定义结构设置为“/archives/%post_id%.html”,但是这样的话有一个问题,搜索引擎收录的可都是htm文件,这样不是要掉好多链接吗?
我们可以在这里做一个过渡性的工作,就是把htm文件重写到html文件,这样那些收录的htm链接也不会丢,等待搜索引擎重新收录以html结尾的地址,具体办法就是在conf文件中添加以下代码
rewrite ^(.*)(?i).htm $1.html break;
这样就可以使得htm和html同时访问了,当收录的htm地址转为html之后,这句话也就可以不要了。