1
注意点:在重写的时候,一定要注意,if 和后面的括号是要有一个空格的
if ($host ~ .*\.com ){
rewrite ^/de/(.*)$ http://www.onfancy.de/$1 permanent;
rewrite ^/fr/(.*)$ http://www.onfancy.fr/$1 permanent;
rewrite ^/it/(.*)$ http://www.onfancy.it/$1 permanent;
rewrite ^/es/(.*)$ http://www.onfancy.es/$1 permanent;
}
2.在重写的时候,需要使用正则表达式
$host 代表域名,首先判断域名,
来看这个正则:
rewrite ^/de/(.*)$ http://www.onfancy.de/$1 permanent
代表域名下面的 .com/de/这个路径下面的,重写为http://www.onfancy.de/
其中$1代表前面括号中匹配的字符也就是说字符 ^/de/(.*)$ 中的(.*) 就是后面的$1,如果还有括号,依次为$2,$3
最后一个字符可以用下面的:
rewrite指令的最后一项参数为flag标记,支持flag标记有:
1.last 相当于apache里面的[L]标记,表示rewrite。
2.break本条规则匹配完成后,终止匹配,不再匹配后面的规则。
3.redirect 返回302临时重定向,浏览器地址会显示跳转后的URL地址。
4.permanent 返回301永久重定向, 浏览器地址会显示跳转后的URL地址。
使用last和break实现URI重写,浏览器地址栏不变。而且两者有细微差别,使用alias指令必须用last标记;使用proxy_pass指令时,需要使用break标记。Last标记在本条rewrite规则执行完毕后,会对其所在server{......}标签重新发起请求,而break标记则在本条规则匹配完成后,终止匹配。
一般在跟location中(location /{...})或直接在server标签中编写rewrite规则,推荐使用last标记;在非根location中(location /cms/{...}),则使用break。
如果URI中含有参数(/app/test.php?id=5),默认情况下参数会被自动附加到替换串上,你可以通过在替换串的末尾加上?标记来解决这一问题。
例如:rewrite ^/test(.*)$ http://www.tiyee.net/home permanent;
访问http://www.tiyee.net/test?id=5 会跳转到 http://www.tiyee.net/home?id=5
参考文章:
http://nginx.org/cn/docs/http/converting_rewrite_rules.html
http://www.cnblogs.com/cgli/archive/2011/05/16/2047920.html
http://bbs.aliyun.com/read/137857.html
http://zhan.renren.com/itbegin?gid=3602888498031453983&checked=true
http://lihuipeng.blog.51cto.com/3064864/671614