Nginx的Rewrite规则和Apache的Rewite规则差别不是很大,几乎可以直接使用(当然并不是说不改动任何东西就拿来使用)。
比如在Apache中这样写规则rewrite^/([0-9]{5}).html$/viewthread.php?tid=$1last;而在Nginx中写成这样写是无法启动的,解决的办法是加上两个双引号:rewrite“^/([0-9]{5}).html$”/viewthread.php?tid=$1last;一般来说,nginx的rewrite规则可以写在nginx配置文件中的location{}中,也可以针对特定的目录进行location\demo{},这个实例就是针对服务器根目录下的demo目录的rewrite规则配置等等;
nginx的rewrite重写是基于pcre库匹配的,所以会牵涉到一些基本的nginx匹配规则:
nginxrewrite正则表达式匹配
大小写匹配
~为区分大小写匹配
~*为不区分大小写匹配
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配
文件及目录匹配
-f和!-f用来判断是否存在文件
-d和!-d用来判断是否存在目录
-e和!-e用来判断是否存在文件或目录
-x和!-x用来判断文件是否可执行
flag标记
last相当于Apache里的[L]标记,表示完成rewrite
break终止匹配,不再匹配后面的规则。
redirect返回302临时重定向地址栏会显示跳转后的地址。
permanent返回301永久重定向地址栏会显示跳转后的地址。
一些可用的全局变量
可以用在rewrite时的条件判断
$args
$content_length
$content_type
$document_root
$document_uri
$host
$http_user_agent
$http_cookie
$limit_rate
$request_body_file
$request_method
$remote_addr
$remote_port
$remote_user
$request_filename
$request_uri
$query_string
$scheme
$server_protocol
$server_addr
$server_name
$server_port
$uri