在nginx中配置url地址重写的方法 在nginx中,Rewrite用来实现URL的重写,Nginx的Rewrite规则采用Pcre,perl兼容正则表达式的语法规则匹配,如果需要Nginx的Rewrite功能,在编译Nginx之前,需要编译安装PCRE库。
先来熟悉下,nginx中的if指令。
复制代码代码示例:
if ($http_user_agent ~MSIE){
rewrite ^(.*)$/msie/$1 break; } if (!-f$request_filename){ rewrite ^/img/(.*)$/site/$host/images/$1 last; }
其次是 rewrite 语法规则:
变量名可以使用"="或"!="运算符
~ 符号表示区分大小写字母匹配 ~* 符号表示不区分大小写字母匹配 !~ 和 !~ 与~ !~ 相反 -f 和 !-f 用来判断文件是否存在 -d 和 !-d 用来判断目录是否存在 -e 和 !-e 用来判断文件或目录是否存在 -x 和 !-x 用来判断文件是否可以执行 也支持$1到$9位置参数
return指令
复制代码代码示例:
location ~ .*\.(sh|bash)?$
{ return 403; }
rewrite指令
rewrite指令的最后一项参数为flag标记,支持的flag标记主要有以下几种:
last :相当于Apache里德(L)标记,表示完成rewrite; break;本条规则匹配完成后,终止匹配,不再匹配后面的规则 redirect:返回302临时重定向,浏览器地址会显示跳转后的URL地址 permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址 last和break用来实现URL重写,浏览器地址栏URL地址不变
实例:将访问/b跳转到/bbs目录上去:
复制代码代码示例:
location /b {
autoindex on; alias /usr/local/nginx/html/redhat; rewrite ^/b/?$ /bbs permanent; } location /bbs { autoindex on; alias /usr/local/nginx/html/bbs; }
rewrite规则编写实例
复制代码代码示例:
if ($http_user_agent ~ Firefox) {
rewrite ^(.*)$ /firefox/$1 break; } if ($http_user_agent ~ MSIE) { rewrite ^(.*)$ /msie/$1 break; } if ($http_user_agent ~ Chrome) { rewrite ^(.*)$ /chrome/$1 break; }
3,防止盗链:
复制代码代码示例:
location ~*\.(gif|jpg|png|swf|flv)${
valid_referers none blocked www.it.net.cn/*.test.com; if ($invalid_referer) rewrite ^/(.*) http://www.it.net.cn/error.html }
4,实现域名跳转:
复制代码代码示例:
server {
(责任编辑:IT)listen 80; server_name itnetcn.example.com; write ^(.*)$ http://zhang.example.com/$1 permanent; location / { root html; index index.html index.htm; } |