详解常用的nginx rewrite重写规则

2019-10-17 16:57:53于海丽

if指令中,可以使用全局变量,这些变量有:

$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相同。

使用return跳转

我们有时需要在Nginx上使用rewrite做301地址跳转,比如以下规则:

rewrite ^ $scheme://www.mysite.com$request_uri permanent;

当访问任意url都会301永久定向到www.mysite.com的url上。这个写法没错,但是因为使用了rewrite的正则匹配,会损耗一部分资源,nginx官网不推荐这样写。我们可以使用return同样可以实现301跳转,简单实用,看实例:

301永久定向到新域名

server {
  listen 80;
  listen 443 ssl;
  server_name www.old-name.com old-name.com;
  return 301 $scheme://www.new-name.com;
}

以上代码实现了老域名301跳转到新域名上,假如网站要更换新域名的话使用此方法做301跳转。

不带www的域名301跳转到带www的域名

server {
  listen 80;
  listen 443 ssl;
  server_name mysite.com;
  return 301 $scheme://www.mysite.com$request_uri;
}

http站点301跳转到https站点

server {
  listen 80;
  server_name www.mysite.com;
  return 301 https://www.mysite.com$request_uri;
}

以上就是有关Nginx的rewrite重写与重定向的介绍,觉得有用就请练习多遍,收藏好此文不迷路。也希望大家多多支持易采站长站。