在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一.正则表达式匹配,其中: * ~ 为区分大小写匹配 二.文件及目录匹配,其中: * -f和!-f用来判断是否存在文件 三.rewrite指令的最后一项参数为flag标记,flag标记有: 1.last 相当于apache里面的[L]标记,表示rewrite。 使用last和break实现URI重写,浏览器地址栏不变。而且两者有细微差别,使用alias指令必须用last标记;使用proxy_pass指令时,需要使用break标记。Last标记在本条rewrite规则执行完毕后,会对其所在server{……}标签重新发起请求,而break标记则在本条规则匹配完成后,终止匹配。 复制代码 代码如下: rewrite "/photo/([0-9]{2})([0-9]{2})([0-9]{2})"/path/to/photo/$1/$1$2/$1$2$3.png ; 四.NginxRewrite 规则相关指令 1.break指令 使用环境:server,location,if; 2.if指令 使用环境:server,location 3.return指令 语法:returncode ; 复制代码 代码如下: location ~ .*\.(sh|bash)?$ { return 403; } 4.rewrite 指令 语法:rewriteregex replacement flag 复制代码 代码如下: if( $host ~* www\.(.*) ) { set $host_without_www $1; rewrite ^(.*)$ http://$host_without_www$1permanent; } 5.Set指令 语法:setvariable value ; 默认值:none; 使用环境:server,location,if; 6.Uninitialized_variable_warn指令 语法:uninitialized_variable_warnon|off 五.Nginx的Rewrite规则编写实例 1.当访问的文件和目录不存在时,重定向到某个php文件 复制代码 代码如下: if( !-e $request_filename ) { rewrite ^/(.*)$ index.php last; } 2.目录对换 /123456/xxxx ====> /xxxx?id=123456 复制代码 代码如下: rewrite ^/(\d+)/(.+)/ /$2?id=$1 last; 3.如果客户端使用的是IE浏览器,则重定向到/ie目录下 复制代码 代码如下: if( $http_user_agent ~ MSIE) { rewrite ^(.*)$ /ie/$1 break; } 4.禁止访问多个目录 复制代码 代码如下: location ~ ^/(cron|templates)/ { deny all; break; } 5.禁止访问以/data开头的文件 复制代码 代码如下: location ~ ^/data { deny all; } 6.禁止访问以.sh,.flv,.mp3为文件后缀名的文件 复制代码 代码如下: location ~ .*\.(sh|flv|mp3)$ { return 403; } 7.设置某些类型文件的浏览器缓存时间 复制代码 代码如下: location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ .*\.(js|css)$ { expires 1h; } 8.给favicon.ico和robots.txt设置过期时间; 这里为favicon.ico为99天,robots.txt为7天并不记录404错误日志 复制代码 代码如下: location ~(favicon.ico) { log_not_found off; expires 99d; break; } location ~(robots.txt) { log_not_found off; expires 7d; break; } 9.设定某个文件的过期时间;这里为600秒,并不记录访问日志 复制代码 代码如下: location ^~ /html/scripts/loadhead_1.js { access_log off; root /opt/lampp/htdocs/web; expires 600; break; } 10.文件反盗链并设置过期时间 这里的return412 为自定义的http状态码,默认为403,方便找出正确的盗链的请求 复制代码 代码如下: location ~*^.+\.(jpg|jpeg|gif|png|swf|rar|zip|css|js)$ { valid_referers none blocked *.ogeek.net*.linuxidc.net localhost 208.97.167.194; if ($invalid_referer) { rewrite ^/ http://img.linuxidc.net/leech.gif; return 412; break; } access_log off; root /opt/lampp/htdocs/web; expires 3d; break; } 11.只允许固定ip访问网站,并加上密码 复制代码 代码如下: root /opt/htdocs/www; allow 208.97.167.194; allow 222.33.1.2; allow 231.152.49.4; deny all; auth_basic “C1G_ADMIN”; auth_basic_user_file htpasswd; 12将多级目录下的文件转成一个文件,增强seo效果 /job-123-456-789.html 指向/job/123/456/789.html 复制代码 代码如下: rewrite^/job-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /job/$1/$2/jobshow_$3.html last; 13.文件和目录不存在的时候重定向: 复制代码 代码如下: if (!-e $request_filename) { proxy_pass http://127.0.0.1; } 14.将根目录下某个文件夹指向2级目录 如/shanghaijob/ 指向 /area/shanghai/ 复制代码 代码如下: if (-d $request_filename){ rewrite ^/(.*)([^/])$ http://$host/$1$2/permanent; } 知道原因后就好办了,让我手动跳转吧 复制代码 代码如下: rewrite ^/([0-9a-z]+)job$ /$1job/permanent; rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last; 15.域名跳转 复制代码 代码如下: server { listen 80; server_name jump.ogeek.net; index index.html index.htm index.php; root /opt/lampp/htdocs/www; rewrite ^/ https://www.ogeek.net/; access_log off; } 16.多域名转向 复制代码 代码如下: server_name www.ogeek.net www.ogeek.net; index index.html index.htm index.php; root /opt/lampp/htdocs; if ($host ~ "linuxidc\.net") { rewrite ^(.*) https://www.ogeek.net$1permanent; } 六.nginx全局变量 arg_PARAMETER #这个变量包含GET请求中,如果有变量PARAMETER时的值。 七.Apache和Nginx规则的对应关系 Apache的RewriteCond对应Nginx的if 例如:允许指定的域名访问本站,其他的域名一律转向www.linuxidc.net 复制代码 代码如下: RewriteCond %{HTTP_HOST} !^(.*?)\.aaa\.com$[NC] RewriteCond %{HTTP_HOST} !^localhost$ RewriteCond %{HTTP_HOST}!^192\.168\.0\.(.*?)$ RewriteRule ^/(.*)$ https://www.ogeek.net[R,L] Nginx: 复制代码 代码如下: if( $host ~* ^(.*)\.aaa\.com$ ) { set $allowHost ‘1'; } if( $host ~* ^localhost ) { set $allowHost ‘1'; } if( $host ~* ^192\.168\.1\.(.*?)$ ) { set $allowHost ‘1'; } if( $allowHost !~ ‘1' ) { rewrite ^/(.*)$ http://www.linuxidc.netredirect ; } 重写规则在许多地方都要使用到,整理在这里,方便之后使用到时候随时查找。 |
请发表评论