Nginx捕獲404錯誤實現自定義處理方式
阿新 • • 發佈:2021-01-13
需求背景
最近專案在做架構升級,由原來的SSM的單體架構變成前後端分離的專案,原專案使用了大量的動態路由,由於時間原因,我們不能使用VUE等支援動態路由的技術,這就導致之前大量的路徑會改變。由於一些頁面被做成了二維碼,印刷在了紙質檔案中。所以這部分功能只能保持原來的路徑可以正常訪問。
解決思路
新專案的前端是部署在Nginx中的,原有的動態路由繼續訪問會顯示404錯誤,我們需要通過nginx捕獲404錯誤,將錯誤的路由變成引數,傳送到後臺,按照相應規則處理,重定向到對應的頁面即可
Nginx對應配置
http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; proxy_intercept_errors on; #http全域性塊捕獲異常必須新增 server { listen 80; server_name 你的域名; location ~/(.*)$ { root html; index index.html index.htm; error_page 404 http://你的後臺地址?p=$1; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
總結:1.proxy_intercept_errors on; 開啟異常捕獲
2.使用正則匹配獲取url,$1是獲取到的路由,作為引數傳送給對應的介面
後臺處理
@RequestMapping(value = "/test", method = RequestMethod.GET)
public void f(HttpServletRequest request, HttpServletResponse response) throws Exception {
//獲取路由引數
String url = request.getQueryString ();
//TODO實現你自己的邏輯....
//重定向到對應頁面
response.sendRedirect("https://www.baidu.com");
}