部分规则是在网站找的,部分规则是在现有的程序中提取的。
现在使用的规则分为三个,第一个是纯静态生成的内容指定,因为thinkphp的纯静态功能是我自己写的,所以放在了一个固定的文件夹中,原本就是放在根目录下面,但是一段时间后我觉得不是很好管理,一旦所有的目录都生成了会产生很多文件夹,所以我根据 wordpress 的静态插件修改了指向规则,这样可以把所有生成的内容放在统一的文件夹下面,便于管理了。
第二个,是404规则,原本打算把我的 wordpress 程序数据全部迁移到 thinkphp 程序中,那样的话我之前格式 https://boke.slhq.cn/1.html 这种格式也要转换成 https://boke.slhq.cn/post/1.html 这种格式,我不是很会写程序中的路由,所以在伪静态规则上动手,经过测试也已经完美可使用了。
第三个就是 thinkphp 本身的规则,这个不需要动,直接放在最后面就行。
完整的规则:
location / { gzip_static always; gunzip on; if (-f $request_filename) { break; } if ($uri ~ /(.*)$){ set $wpuri $1; set $sscfile $document_root/static-cache/$1; } set $ssc Y; if ($query_string !~ .*=.*){ set $ssc "${ssc}Y"; } if ($request_method != "POST"){ set $ssc "${ssc}Y"; } if (-f $sscfile){ set $ssc "${ssc}F"; } if (-f $sscfile/index.html){ set $ssc "${ssc}I"; } if ($ssc = YYYF){ rewrite . /static-cache/$wpuri break; } if ($ssc = YYYI){ rewrite . /static-cache/$wpuri/index.html break; } if (!-e $request_filename){ rewrite ^/(\d+).html http://$host/article/$1.html permanent; rewrite ^(.*)$ /index.php?s=$1 last; break; } }
现在还有一个问题,就是第一个方法指定 static-cache 生成页面,然后访问网站跳转到 static-cache 但不显示 static-cache 这个文件夹在网址中,现在只能生成二级,目前我的程序中 tag 功能生成的基本都是三级,所以测试的时候发现了问题,目前还没有好的解决办法,暂时也只能这样了,现在的网站数据还没有达到一个大的基数,目前不开静态也行。等真正需要开启静态之后我后面会想办法解决这个问题的, 要么 tag 变成二级,要么还要继续完善这个规则。