last:rewrite匹配後,會再次發起一個請求,只會對location裏的規則再次匹配。php
break:rewrite匹配後,不會發起請求,也不會匹配後面的規則。html
舉例:dom
location / {url
root html;spa
index index.php index.html index.htm;htm
}blog
if ($request_uri ~* /cms/) {get
rewrite "^/cms/(.*)\.php" /cms/index.php break;it
# 這裏使用last也能夠,單獨的if只處理一次io
# "if"和"("須要空格
}
location / {
root html;
index index.php index.html index.htm;
if ($request_uri ~* /cms/) {
rewrite "^/cms/(.*)\.php" /cms/index.php break;
# 這裏使用last會形成死循環,在location裏的if會處理屢次
}
}
須要注意url有問號的狀況
比較不加"?"和加上"?"標記的URL跳轉區別
rewrite ^/test(.*)$ http://www.yourdomain.com/home permanent;
訪問http://www.yourdomain.com/test?id=5通過301跳轉後的URL是
http://www.yourdomain.com/home?id=5
rewrite ^/test(.*)$ http://yourdomain.com/home? permanent;
訪問http://www.yourdomain.com/test?id=5通過301跳轉後的URL是
http://www.yourdomain.com/home