nginx伪静态规则的小笔记-k8凯发旗舰
伪静态配置是网站开发的收官之作,明生(monseng)自行开发了一个cms系统,现在也进行到了这一步,因为初次做伪静态设置,是个新人,所以不厌其烦地做个小笔记。
网站关于nginx伪静态规则设置成系统的教程很少,不少都是作者零星的一些记录,刚接触网站的伪静态书写的话,可能有点迷糊,我也是参考了一些网上内容及nginx、php等手册完成了明生(monseng)cms系统的伪静态配置。
伪静态是动态页面url的伪处理,例如php开发的网站,源站都是php运行文件,所以产生的url都可能带有.php后缀,此外,php页面参数的post和get等方法的获取也可能产生如?id=、?page=等类似格式。所以伪静态化就是整理url的格式为常见的html的url格式方式,xxx.html或者xxx/id之类的样式。
所以,伪静态是一种url重写的方法,没有固式样式,可以根据需要来处理。
如果感觉nginx的伪静态规则不好写,可能还是正则有点不熟悉。
php、js、mysql以及nginx都有自己的正规则书写要求,一般性的正规格式是通用的,具体应用场景又有些差异,此外正则如天书般的模糊,平时使用的场景不多,所以也是难处所在。
网站搭建在nginx服务器上,自然要记一下nginx伪静态的配置方法。
nginx伪静态基本格式和语法
nginx伪静态语法很多,一般需求下可以通过rewrite重写url(重定向)来完成伪静态,这种方法最常见,这里主要记一下使用rewrite完成网站的伪静态配置。
一、rewrite基本语法
句法:syntax: rewrite regex replacement [flag]
默认:default: –
语境:context: server,location,if
rewrite 指令最后跟一个 flag 标记,支持的 flag 标记有如下表格所示:
flag 作用
last 本条规则匹配完成后,停止匹配,不再匹配后面的规则
break 本条规则匹配完成后,停止匹配,不再匹配后面的规则
redirect 返回302临时重定向,地址栏会显示跳转后的地址
permanent 返回301永久重定向,地址栏会显示跳转后的地址
二、nginx伪静态常用正则
~ 为区分大小写的匹配。
~* 不区分大小写的匹配(匹配firefox的正则同时匹配firefox)。
!~ 不匹配的
!~* 不匹配的
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
* 重复零次或更多次
重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
*? 重复任意次,但尽可能少重复
? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复
\w 匹配任意不是字母,数字,下划线,汉字的字符
\s 匹配任意不是空白符的字符
\d 匹配任意非数字的字符
\b 匹配不是单词开头或结束的位置
[^x] 匹配除了x以外的任意字符
这些正则格式基本上是通用的,需要平时多用多记一下。
三、正式书写伪静态规则
明生(monseng)cms主要页面包括:index.php(k8凯发旗舰主页),archive.php(栏目页),post.php(文章页),search.php(搜索页)、pay.php(支付页)以及其它附属的登录注册面页等。
k8凯发旗舰主页分页格式: index.php?page=xxx
栏目的分页格式: archive.php?class_id=xxx&page=yyy
文件页面格式: post.php?id=xxx
需求:文件路经放在cms下,不用动,使用rewrite重写成 .html格式。
location /{
rewrite ^(.*)/cms$ $1/cms/index.php?$2 last;
rewrite ^(.*)/cms/single-([0-9] )\.html$ $1/cms/post.php?id=$2;
rewrite ^(.*)/cms/archive-([0-9] )\.html$ $1/cms/archive.php?id=$2;
rewrite ^(.*)/cms/search.html$ $1/puting/cms/search.php$2;
}
其中;
^(.*):替换url开始
$:替换url结束
$1:原url开始,第一个参数
$2:原url第二个参数
([0-9] ):替换数字id
\:转义字符
/:路径分隔符
其实就是把后面的动态url格式书写成前的伪静态url格式,这样就实现了访问静态url时实际上是动态url的跳转。
page分页符就不用动了默认?page=xxx
这样就完成了一个简单nginx伪静态规则配置,不过说起来容易,就这么点代码要正确写出来还真费围折,如果对正则不熟悉的话。
然后,将源码的url地址写成伪静态处理的格式就完成网站的nginx伪静态基本配制了。
好了,这次简单的nginx伪静态配置笔记就写到这了,希望可以抛砖引玉,对你有所启发。