1. 程式人生 > 其它 >Nginx捕獲404錯誤實現自定義處理方式

Nginx捕獲404錯誤實現自定義處理方式

技術標籤:java踩坑系列nginxjava

需求背景

最近專案在做架構升級,由原來的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"); }