Nginx Rewrite正则表达式案例
前两天简单整理了下Nginx的URL Rewrite基本指令,今天谈谈Nginx Rewrite的location正则表达式。
1.Nginx Rewrite 基本标记(flags)
last 相当于Apache里的[L]标记,表示完成rewrite
break 本条规则匹配完成之后,终止匹配,不再匹配后面的规则。
redirect 返回302临时重定向 地址栏会显示跳转后的地址
permanent 返回301永久重定向 地址栏会显示跳转后的地址
2、正则表达式:
1)变量名,错误的值包括:空字符串“”,或者任何以0开始的字符串。
(2)变量比较可以使用“=”和“!=”(等于和不等于)运算符
(3)正则表达式模式匹配可以使用“~”和“~*”符号
(4)~ 为区分大小写匹配
(5)~* 为不区分大小写匹配
文件以及目录匹配:
(6)!~和!~*分别为区分大小写不匹配及不区分大小写不匹配
(7)-f和!-f用来判断是否存在文件
(8)-d和!-d用来判断是否存在目录
(9)-e和!-e用来判断是否存在文件或目录
(10)-x和!-x用来判断文件是否可执行:
3、案例:
3.1)需要将网站以https形式访问
server {
listen 80;
server_name www.xxx.com;
rewrite ^(.*)$ https://$host$1 permanent;
}
小提示:百度是通过index.html刷新网页,更巧妙一些。
|
1
2
3
|
<html> <meta http-equiv="refresh" content="0;url=https://baidu.com/"> </html> |
3.2)Nginx Redirect将所有xxx.com与abc.xxx.com域名全部自跳www.xxx.com
|
1
2
3
4
5
6
7
8
9
10
|
server {listen 80;server_name xxx.com abc.xxx.com;index index.html index.php;root /var/InfiNET/web/;if ($http_host !~ "^www\.xxx\.com$") {rewrite ^(.*) [url]http://www.xxx.com$1 redirect;}........................} |
3.3)如果虚拟站点只允许https访问时,用http访问时nginx会报出497错误码,用户习惯用http访问,后面通过497状态码让它自动跳到443端口
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
server { listen x.x.x.x:443; #ssl端口 listen x.x.x.x:80; server_name xxx.com; ssl on; #指定PEM格式的证书文件 ssl_certificate /xxx/xxx.pem; #指定PEM格式的私钥文件 ssl_certificate_key /xx/xxx.key; #让http请求重定向到https请求 error_page 497 https://$host$uri?$args; } |
3.4)location匹配查询资源
eg:
示例 1:
|
1
2
3
4
|
location = / {# matches the query / only.# 只匹配 / 查询。} |
匹配任何查询,因为所有请求都已 / 开头。但是正则表达式规则和长的块规则将被优先和查询匹配
示例 2:
|
1
2
3
4
|
location ^~ /images/ {# matches any query beginning with /images/ and halts searching,# so regular expressions will not be checked.# 匹配任何已 /images/ 开头的任何查询并且停止搜索。任何正则表达式将不会被测试。 |
示例 3:
|
1
2
3
4
|
location ~* \.(gif|jpg|jpeg)$ {# matches any request ending in gif, jpg, or jpeg. However, all# requests to the /images/ directory will be handled by} |
3.4.1) 匹配任何已 gif、jpg 或 jpeg 结尾的请求。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
location ~ .(jsp|jspx|do)?$ { proxy_set_header Host $host;proxy_pass http://127.0.0.1:8080;proxy_redirect off;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header Host $host;client_max_body_size 10m; client_body_buffer_size 128k;proxy_connect_timeout 90;proxy_send_timeout 90;proxy_read_timeout 90;proxy_buffer_size 4k;proxy_buffers 4 32k;proxy_busy_buffers_size 64k;proxy_temp_file_write_size 64k;} |
|
1
2
3
4
5
|
location ~ .*.PHP?$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fcgi.conf; } |
3.5) Nginx exprires 缓存
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {expires 30d; } location ~ .*\.(js|css)?$ {expires 12h;}}# 根据文件类型location ~* \.(js|css|jpg|jpeg|gif|png|swf)$ {if (-f $request_filename) {root /html/web/bbs;expires 1d;break;}}#根据目录类型location ~ ^/(images|javascript|js|css|flash|media|static)/ {root /html/web;expires 30d;} |
3.6)nginx防盗链
|
1
2
3
4
5
6
7
8
|
#Preventing hot linking of images and other file typeslocation ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip)$ {valid_referers none blocked server_names *.chinarenservice.com http://localhost baidu.com;if ($invalid_referer) {rewrite ^/ [img]http://www.xxx.com/images/default/logo.gif[/img];# return 403;}} |
3.7)Nginx禁止访问下载某类型的文件
3.7.1)Nginx 下禁止访问*.txt 文件,配置方法如下.代码:
|
1
2
3
4
5
6
|
location ~* \.(txt|doc)$ {if (-f $request_filename) {root /html/test;break;}} |
3.7.2)禁止访问某个目录
|
1
2
3
|
location ~ ^/(tomcat)/ {deny all;} |
3.7.3)禁止下载以点开头的文件:如 .freeke;.dat;.exe
|
1
2
3
|
location ~ /\..+ {deny all;} |
本文出自 “永不放弃!任志远” 博客,请务必保留此出处http://renzhiyuan.blog.51cto.com/10433137/1898091
Nginx Rewrite正则表达式案例的更多相关文章
- Nginx的Rewrite正则表达式,匹配非某单词
Nginx的Rewrite正则表达式,匹配非某单词 由于要rewrite一个地址从 /mag/xx/xxx/ -> /m/xxx 但原先 /mag/xx/more/ 要保留 这就得写一个比较奇特 ...
- Nginx的正则表达式
Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Ра ...
- Nginx Rewrite相关功能
目录 Nginx Rewrite相关功能 ngx_http_rewrite_module模块指令: if指令: set指令: break指令: return指令: rewrite_log指令: rew ...
- nginx——rewrite模块
1.什么是Nginx的Rewrite规则? Rewrite主要的功能就是实现URL的重写,Nginx的Rewrite规则采用PCRE(Perl Compatible Regular Expressio ...
- Nginx Rewrite规则初探(转)
Nginx rewrite(nginx url地址重写)Rewrite 主要的功能就是实现URL的重写,Nginx的Rewrite规则采用Pcre,perl兼容正则表达式的语法规则匹配,如果需要Ng ...
- Nginx Rewrite详解
Nginx Rewrite详解 引用链接:http://blog.cafeneko.info/2010/10/nginx_rewrite_note/ 原文如下: 在新主机的迁移过程中,最大的困难就是W ...
- nginx rewrite 实现URL跳转
最近工作中常常要改nginx配置,学习了nginx中rewrite的用法 URL跳转这里说的URL跳转就是用户在访问一个URL时将其跳转到另一个URL上.常见的应用场景是让多个域名跳转到同一个URL上 ...
- [转帖]Nginx rewrite模块深入浅出详解
Nginx rewrite模块深入浅出详解 https://www.cnblogs.com/beyang/p/7832460.html rewrite模块(ngx_http_rewrite_modul ...
- nginx rewrite 指令
ginx通过ngx_http_rewrite_module模块支持url重写.支持if条件判断,但不支持else. 该模块需要PCRE支持,应在编译nginx时指定PCRE源码目录, nginx安装方 ...
随机推荐
- 大数据开发实战:Hive优化实战1-数据倾斜及join无关的优化
Hive SQL的各种优化方法基本 都和数据倾斜密切相关. Hive的优化分为join相关的优化和join无关的优化,从项目的实际来说,join相关的优化占了Hive优化的大部分内容,而join相关的 ...
- uva 10712 - Count the Numbers(数位dp)
题目链接:uva 10712 - Count the Numbers 题目大意:给出n,a.b.问说在a到b之间有多少个n. 解题思路:数位dp.dp[i][j][x][y]表示第i位为j的时候.x是 ...
- linux命令学习——cat
1.前言 今天需要处理一个oui.txt文件,需要从中抽丝man和orginaziton信息,导出到另外一个文件中.可以cat和grep命令进行操作.之前对cat命令了解一下,知道cat可以查看文件内 ...
- [Functional Programming] Using JS, FP approach with Arrow or State Monad
Using Naive JS: const {modify, get} = require('crocks/State'); const K = require('crocks/combinators ...
- C++ 构造与析构的执行顺序
1.代码如下:class A{public: int _Id; A():_Id(0) { printf("A[%d]\n",_Id); } ~A() { printf(" ...
- DIV+CSS IE6/IE7/IE8/FF兼容问题汇总
1.IE8下兼容问题,这个最好处理,转化成ie7兼容就可以.在头部加如下一段代码,然后只要在IE7下兼容了,IE8下面也就兼容了 <meta http-equiv="x-ua-comp ...
- 005-Go 操作PostgreSQL数据库
package main import( "fmt" "database/sql" _ "github.com/lib/pq" " ...
- ES6 Generator async
Generator 函数是 ES6 提供的一种异步编程解决方案 async 函数使得异步操作变得更加方便,是 Generator 函数的语法糖. js单线程的原因是:避免DOM渲染冲突! 更新:201 ...
- ES6学习笔记七:生成器与异步操作
一:Generator Generator 函数是一个普通函数,但是有两个特征.一是,function关键字与函数名之间有一个星号:二是,函数体内部使用yield表达式,输出不同的内部状态. 执行 G ...
- FTP在CentOS上安装与使用
安装: yum install -y vsftpd 相关配置文件: /etc/vsftpd/vsftpd.conf //主配置文件,核心配置文件 /etc/vsftpd/ftpusers //黑名单, ...