nginx伪静态模块rewrite重写规则详细介绍

nginx的rewrite模块配置重定向以一个location跳转到另一个location最多只能跳转10次,不能超过否则就会报500错误。


return指令:在server, location, if中使用。

例:

return 404 #直接返回404状态码

return 301 https://xcwmoon.com  #301跳转

return 200  '{"key":"value","key1":"value1"}'; #可以带纯字符串或json字符串


rewrite指令:使用正则与字符串修改url,按匹配结果出现的顺序执行替换,可以加尾标

last尾标与bareak尾标:因为这两个比较相似,所以就放在这儿一起说了,last尾标就是当找一这个规则匹配成功后,终止继续匹配,但是匹配到的新结果会再次重新匹配location(这里就是上文中提到的重定向不能超过10次,否则会报500错误 ),而bareak则不会再次重新匹配location

就是说如果rewrite规则中有超过10个规则都能与一个匹配成功,但是没用尾标或用last尾标则会报500错误 ,如果用bareak尾标则不会。

redirect尾标:表示302

permanent尾标:表示301

上个示例就明白了:

rewrite ^(.*)$ http://xcwmoon.com$1 permanent; #其实这就是一个301重定向

rewrite ^(.*)$ http://xcwmoon.com$1 redirect; #其实这就是一个302重定向


rewrite_log指令:值on或off 会在错误日志中记录notice的重定向日志.


bareak指令: 在server, location, if中使用,使用后会停止匹配后面的规则.与php里的bareak作用差不多。


if(condition){....}:在server, location中使用,尽量使用try_files代替if.

判断字符串是否相等请使用 = 或 !=

正则表达式匹配:使用~(区分大小写)和~*(不区分大小写),取反运算!~和!~*

文件是否存在:使用-f和!-f操作符

目录是否存在:使用-d和!-d操作符

文件、目录、符号链接是否存在:使用-e和!-e操作符

文件是否可执行:使用-x和!-x操作符

try_files用法例如 try_files /$path 404.html#首先判断$path文件是否存在,如果不存在则判断$path 目录是否存在,如果不存在则跳转到404.html


set指令:声明变量并赋值.

例:set $var "value" #接下来就可以直接使用变量$var了,但是用这个拼接路径再用try_files会有问题。


uninitialized_variable_warn指令:启用或禁用对未初始化变量的警告日志记录。

例如:/a([0-9]+)/b(0-9)$ /$1/$2/$3.html break; #大概就是这个意思了,$3这个变量不存在就会写入警告日志。不想烦人就关掉就行了。



Tags nginx

留言(0)

评论