正则表达式经典案例

正则表达式经典案例,第1张

NginxRewrite正则表达式案例

前两天简单整理了一下NginxURL重写的基本指令。今天我就来说说Nginx重写的位置正则表达式。

1.Nginx重写基本标志

Last相当于Apache中的[L]标记,表示重写完成

该规则匹配完成后,匹配将终止,后续规则将不匹配。

返回redirect302临时重定向地址栏将显示跳转后的地址

永久返回301永久重定向地址栏显示跳转后的地址。

2.正则表达式:

1)变量名。错误值包括:空string"",或任何以0开头的字符串。

(2)变量比较可以用"="和"!="(相等和不相等)运算符

(3)正则表达式模式匹配可以使用“~”和“~*”符号。

(4)~区分大小写的匹配

(5)~*是不区分大小写的匹配。

和文件目录匹配:

(6)!~还有!~*区分大小写的不匹配和不区分大小写的不匹配

(7)-f和!-f用于确定文件是否存在

(8)-d和!-d用于确定目录是否存在。

(9)-e和!-e用于确定文件或目录是否存在。

(10)-x和!-x用于确定文件是否可执行:

3.案例:

3.1)网站需要以https的形式访问

服务器{

听80;

服务器名www.xxx.com;

重写^(.*)$https://$host永久;

}

提示:百度通过index.html刷新网页,比较巧妙。

<html>   <meta http-equiv="refresh" content="0;url=https://baidu.com/">   </html>

3.2)Nginx重定向将从www.xxx.com跳转所有xxx.com和abc.xxx.com域名

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访问,nginx在使用http访问时会报错497。用户习惯使用http访问,然后通过497状态码让它自动跳转到443端口。

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)位置匹配查询资源

例如:

示例1:

location = / { # matches the query / only. # 只匹配 / 查询。 }

匹配任何查询,因为所有请求都已经/开始。但是正则表达式规则和长块规则将优先匹配查询。

示例2:

location ^~ /p_w_picpaths/ { # matches any query beginning with /p_w_picpaths/ and halts searching, # so regular expressions will not be checked. # 匹配任何已 /p_w_picpaths/ 开头的任何查询并且停止搜索。任何正则表达式将不会被测试。


示例3:

location ~* \.(gif|jpg|jpeg)$ { # matches any request ending in gif, jpg, or jpeg. However, all # requests to the /p_w_picpaths/ directory will be handled by }

3.4.1)匹配任何已被gif、jpg或jpeg终止的请求。

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; } 3.4.2)匹配.php代理到后端 location ~ .*.PHP?$ {         fastcgi_pass   127.0.0.1:9000;         fastcgi_index  index.php;         include        fcgi.conf;     }

3.5)Nginx表达式缓存

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 ~ ^/(p_w_picpaths|javascript|js|css|flash|media|static)/ { root /html/web; expires 30d; }

3.6)nginx防盗链

#Preventing hot linking of p_w_picpaths and other file types location ~* ^.+\.(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/p_w_picpaths/default/logo.gif[/img]; # return 403; } }

3.7)Nginx禁止访问和下载某些类型的文件。

3.7.1)访问*。nginx下禁止txt文件。配置方法如下。代码:

location ~* \.(txt|doc)$ { if (-f $request_filename) { root /html/test; break; } }

3.7.2)禁止访问一个目录。

location ~ ^/(tomcat)/ { deny all; }

3.7.3)禁止下载以点号开头的文件:如。freeke;。dat。可执行程序的扩展名

location ~ /\..+ { deny all; }


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/777769.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-03
下一篇 2022-05-03

发表评论

登录后才能评论

评论列表(0条)

保存