NGINX 通过 rewrite实现对URL的改写
$args :这个变量等于请求行中的参数,同$query_string $content_length : 请求头中的Content-length字段。 $content_type : 请求头中的Content-Type字段。 $document_root : 当前请求在root指令中指定的值。 $host : 请求主机头字段,否则为服务器名称。 $http_user_agent : 客户端agent信息 $http_cookie : 客户端cookie信息 $limit_rate : 这个变量可以限制连接速率。 $request_method : 客户端请求的动作,通常为GET或POST。 $remote_addr : 客户端的IP地址。 $remote_port : 客户端的端口。 $remote_user : 已经经过Auth Basic Module验证的用户名。 $request_filename : 当前请求的文件路径,由root或alias指令与URI请求生成。 $scheme : HTTP方法(如http,https)。 $server_protocol : 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。 $server_addr : 服务器地址,在完成一次系统调用后可以确定这个值。 $server_name : 服务器名称。 $server_port : 请求到达服务器的端口号。 $request_uri : 包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。 $uri : 不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”。 $document_uri : 与$uri相同。
符号解释: ^ 匹配字符串的开始 / 匹配域名的分隔符 . 匹配除换行符以外的任意字符 * 重复零次或更多次 (.*) 匹配任意字符 .* 匹配任意文本 $ 匹配字符串的结束
例子
server
{
listen 80;
server_name www.xyz.com;
index index.htm index.php;
root /export/home/www
//下面条件不能用数学运算 实现的功能是访问www.abc.com/index.php?type=2&tid=id12345
//都跳转成www.xyz.com/index.php?type=2&tid=id12345
if ($host = "www.abc.com" ){
rewrite ^/(.*)$ http://www.xyz.com/$1$2 permanent;
}
}
# 如果文件不存在则返回400 if (!-f $request_filename) { return 400; } # 如果host不是xuexb.com,则301到xuexb.com中 if ( $host != "xuexb.com" ){ rewrite ^/(.*)$ https://xuexb.com/$1 permanent; } # 如果请求类型不是POST则返回405 if ($request_method = POST) { return 405; } # 如果参数中有 a=1 则301到指定域名 if ($args ~ a=1) { rewrite ^ http://example.com/ permanent; }
更多精彩到文章
https://xuexb.com/html/nginx-url-rewrite.html
http://seanlook.com/2015/05/17/nginx-location-rewrite/
http://blog.csdn.net/xingfujie/article/details/7337832