nginx 重写规则

1.return指令

# 将客户端重定向到新的域名
server {
    listen 80;
    listen 443 ssl;
    server_name www.old-name.com;
    return 301 $scheme://www.new-name.com$request_uri;
}

# $scheme是协议(http或https)
# return (301 | 302 | 303 | 307) url;
# return (1xx | 2xx | 4xx | 5xx) ["text"];
# return 401 "Access denied because token is expired or invalid";

 2.rewrite指令

# /download/cdn-west/media/file1成为/download/cdn-west/mp3/file1.mp3。如果文件名上有一个扩展名(例如.flv),该表达式将其删除并用.mp3替换它
server {
    # ...
    rewrite ^(/download/.*)/media/(\w+)\.?.*$ $1/mp3/$2.mp3 last;
    rewrite ^(/download/.*)/audio/(\w+)\.?.*$ $1/mp3/$2.ra  last;
    return  403;
    # ...
}

 3.try_files指令

# http://www.domain.com/images/image1.gif时,NGINX首先在适用于该位置的指令或指令指定的本地目录中查找image1.gif(未显示在片段)。如果image1.gif不存在,则NGINX会查找image1.gif /,如果不存在,则重定向到/images/default.gif
location /images/ {
    try_files $uri $uri/ /images/default.gif;
}

location = /images/default.gif {
    expires 30s;
}

 4. 标准化域名

# 从以前的名称重定向到当前名称
server {
    listen 80;
    listen 443 ssl;
    server_name www.old-name.com old-name.com;
    return 301 $scheme://www.new-name.com$request_uri;
}

# 因为$request_uri捕获域名后面的URL部分,所以如果旧站点和新站点之间存在一对一的页面对应关系,这个重写是合适的(例如,www.new-name.com/about具有相同的基本内容为www.old-name.com/about)。如果您重新组织了网站,除了更改域名之外,将所有请求重定向到主页可能更安全,省略$request_uri:
server {
    listen 80;
    listen 443 ssl;
    server_name www.old-name.com old-name.com;
    return 301 $scheme://www.new-name.com;
}

# NOT RECOMMENDED
rewrite ^ $scheme://www.new-name.com$request_uri permanent

 5.添加和删​​除www前缀

# add 'www'
server {
    listen 80;
    listen 443 ssl;
    server_name domain.com;
    return 301 $scheme://www.domain.com$request_uri;
}

# remove 'www'
server {
    listen 80;
    listen 443 ssl;
    server_name www.domain.com;
    return 301 $scheme://domain.com$request_uri;
}

同样地,return优于以下相当的rewrite。在rewrite需要解释正则表达式-  -并创建自定义变量(),其实就相当于内置变量。 ^(.*)$ $1$request_uri

# NOT RECOMMENDED
rewrite ^(.*)$ $scheme://www.domain.com$1 permanent;

 6.将所有流量重定向到正确的域名

server {
    listen 80 default_server;
    listen 443 ssl default_server;
    server_name _;
    return 301 $scheme://www.domain.com;
}

 7.强制所有请求使用SSL/TLS

# 此server块强制所有访问者使用与您的站点的安全(SSL / TLS)连接。
server {
    listen 80;
    server_name www.domain.com;
    return 301 https://www.domain.com$request_uri;
}

# 关于NGINX重写规则的一些其他博客使用一个if测试和rewrite这个用例的指令,像这样:
# NOT RECOMMENDED
if ($scheme != "https") {
    rewrite ^ https://www.mydomain.com$uri permanent;
}

 8.删除不支持的文件扩展名的请求

location ~ \.(aspx|php|jsp|cgi)$ {
    return 410;
}

location ~ \.(aspx|php|jsp|cgi)$ {
    deny all;
}

 9.配置自定义重新路由

在来自MODXCloud的示例中,您有一个作为一组URL的控制器的资源。您的用户可以为资源使用更易读的名称,并重写(而不是重定向),由控制器在listing.html处理。

rewrite ^/listings/(.*)$ /listing.html?listing=$1 last;
例如,用户友好的网址http://mysite.com/listings/123被重写为由listing.html控制器(http://mysite.com/listing.html?listing=123)处理的网址。

 

https://www.nginx.com/blog/creating-nginx-rewrite-rules/

 

posted @ 2017-07-21 12:22  sunmmi  阅读(378)  评论(0)    收藏  举报