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/

浙公网安备 33010602011771号