###
1、rewrite指令语法
指令语法: rewrite regex replacement [flag]; s#regexp#replacement#g 默认值: none 应用位置: server、location、if
说明: 1) regex ---- uri 2) rewrite是实现URL重写的关键指令,根据regex(正则表达式)部分内容,重定向到replacement , 部分内容,结尾是flag标记
2、举例
#域名跳转
etiantian.org/(.*) ===> www.etiantian.org/\1 #nginx 配置
rewrite ^/(.*) http://www.etiantian.org/$1 permanent; ##301
说明:在上述指令中 1)rewrite为固定关键字,表示开启一条rewrite匹配规则 2)regex部分是^/(.*),这是一个正则表达式匹配所有,匹配成功后跳转http://www.etiantian.org/$1, $1是取前面的regex部分()里的内容 3)结尾permanent;表示永久301重定向标记,即跳转到后面的http://www.etiantian.org/$1地址上
3、关于rewrite指令最后一项参数flag标记的说明见下表
flag标记说明 |
说明 |
last |
本条规则匹配完成后,继续向下匹配新的location URL规则 |
break |
本条规则匹配完成即终止,不再匹配后面的任何规则 |
redirect |
返回302 临时重定向,浏览器地址栏会显示跳转后的URL地址 |
permanent |
返回301永久重定向,浏览器地址栏会显示跳转后的URL地址 |
说明:在以上的flag标记中,last和break用来实现URL重写,浏览器地址栏的URL地址不变,但在服务器端访问的程序及路径发生了变化。redirect和permanent用来实现URL跳转,浏览器地址栏会显示跳转后的URL地址 |
4、regex常用正则表达式说明
字符 |
描述 |
\ |
将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。 例如:“\n" 匹配一个换行符,序列“\\" 和“\$”则匹配“$” |
^ |
匹配输入字符串的起始位置,如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“r”之后的位置 |
$ |
匹配输入字符串的起始位置,如果设置了RegExp对象的Multiline属性,$也匹配“\n" 或“r" 之前的位置 |
* |
匹配前面的字符零次或多次。例如,o|*能匹配“o”及“oll",*等价于{0,} |
+ |
匹配前面的字符一次或多次,例如,"ol+" 能匹配“ol" 及“oll”,但不能"o", + 等价于{1,} |
? |
匹配前面的字符零次或一次,例如,"do(es)?" 可以匹配“do" 或"does" 中的“do",?等价于{0,1} 当该字符紧跟任何一个其他限制符(*,+?,{n},{n},{n,m})的后面时,匹配模式是非贪婪模式的, 非贪婪模式会尽可能少地匹配所搜索的字符串,而默认的贪婪模式则会尽可能多地匹配所搜索的字符串,例如,对于字符串“OOOO”,"o+ ?" 将匹配单个“o”,而“o+" 将匹配所有"o" |
. |
匹配除"\n" 之外的任何单个字符,要匹配包括“\n"在内的任何字符,请使用像“{\n}"这样的模式 |
(pattern) |
匹配括号内的pattern,并可以在后面获取对应的匹配,常用$0.$9属性获取小括号中的匹配内容。要匹配圆括号字符,请使用“\(”或“\)” |
5、完整nginx配置rewrite示例
#方法1 [root@web01 conf]# cat /etc/nginx/conf.d/www1.conf server { #listen 10088; server_name etiantian.org; location /{ rewrite ^/(.*) http://www.etiantian.org/$1 permanent; root /usr/share/nginx/html; try_files $uri $uri/ /index.html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } #方法2 [root@web01 conf]# cat /etc/nginx/conf.d/www2.conf server { listen 80; server_name www.etiantian.org; if ($host ~* "^etiantian.org$") { rewrite ^/(.*) http://www.etiantian.org/$1 permanent; } location / { root /usr/share/nginx/html;
try_files $uri $uri/ /index.html; index index.html index.htm; } }
6、测试效果
###