原文: https://skyfi.github.io/2018/09/21/%E5%A6%82%E4%BD%95%E8%AE%BE%E7%BD%AEnginx%E9%87%8D%E5%AE%9A%E5%90%91/css
nginx 是一個靈活且高效的網絡服務器,若是想要在nginx服務器中重定,你能夠從下面挑選一個適合的方式。html
這是一個很是簡單的設置方式,只須要個return
語句就能夠了nginx
1 |
return 301 https://example.com$request_uri; |
你須要把這段代碼放到nginx配置文件的server
代碼塊中,301
是永久重定向,你也能夠設置成302
作一個臨時重定向(不建議)。git
一個完整的例子:github
1 |
server { |
若是return
不能知足你的複雜業務需求,你能夠考慮下正則匹配重定向:正則表達式
1 |
rewrite ^/foo/(bar)/(.*)$ https://$server_name/$1/$2 permanent; |
一樣這也是須要在server
代碼塊中,其中permanent
爲301
永久跳轉,若須要302
可修改成redirect
apache
一個完整的例子:centos
1 |
server { |
又如:瀏覽器
1 |
server { |
再如:服務器
1 |
# 根據文件類型設置過時時間 |
若是你有一堆須要重定向的鏈接映射,你能夠考慮在一個地方定義它,而後再經過if
來手動判斷重定向。
首先定義重定向連接映射redirect-map.conf
1 |
map $request_uri $redirect_uri { |
而後在server
代碼塊使用:
1 |
include redirect-map.conf; |
映射也能夠有一些語法:
1 |
map $request_uri $redirect_uri { |
1 |
return 301 https://$host$request_uri; |
1 |
server_name example.com www.example.com example.net www.example.net _; |
1 |
# non-www to www |
1 |
# www to non-www |
1 |
$scheme // HTTP方法(如http,https),如:http |
1 |
$remote_addr //獲取客戶端ip |
nginx的rewrite
至關於apache的rewriterule
(大多數狀況下能夠把原有apache的rewrite
規則加上引號就能夠直接使用),它能夠用在server
,location
和IF
條件判斷塊中,命令格式以下:
1 |
rewrite <regex> <replacement> <flag> |
~
爲區分大小寫匹配~*
爲不區分大小寫匹配!~
和!~*
分別爲區分大小寫不匹配及不區分大小寫不匹配-f
和!-f
用來判斷是否存在文件-d
和!-d
用來判斷是否存在目錄-e
和!-e
用來判斷是否存在文件或目錄-x
和!-x
用來判斷文件是否可執行last
- 基本上都用這個Flag。break
- 停止rewirte
,不在繼續匹配redirect
- 返回臨時重定向的HTTP狀態302permanent
- 返回永久重定向的HTTP狀態301使用last
和break
實現URI
重寫,瀏覽器地址欄不變。並且二者有細微差異:
alias
指令必須用last
標記proxy_pass
指令時,須要使用break
標記last
標記在本條rewrite
規則執行完畢後,會對其所在server{......}
標籤從新發起請求,而break
標記則在本條規則匹配完成後,終止匹配。