2016-12-25 21 views
0

我想通過一個參數,當我使用'error_page'指令Nginx配置文件,如下所示。Nginx error_page指令:我可以傳遞參數嗎?

我想讓'err.html'使用JavaScript處理響應狀態碼。但是,下面根本不起作用。

error_page  
400 401 402 403 404 500 502 503 504 = /err.html?$status; 

當我使用'error_page'指令時,有任何其他方式來傳遞響應狀態碼(或其他參數)嗎?

+0

http://nginx.org/en/docs/http/ngx_http_core_module.html#error_page「一個uri值可以包含變量。」 –

回答

0

我認爲這是一個錯誤的概念。出錯時,使用error_page,nginx不會返回url,而是執行內部重定向,併發送和備用響應。

爲了實現這一目標,目前我能想到的兩種方式,

  1. 多個error_pages對於不同的錯誤代碼,並預先代碼 的JavaScript到這些頁面。

    error_page 404 err404.html; 
    
    error_page 403 err403.html; 
    ... 
    

這似乎有點漫長。

  • 內部重定向到一些自定義位置塊並在響應中添加頭 。
  • error_page 404 405 .../custom_error $ status;

    location ~ /custom_error(.*) { 
        add_header Error-Code $1; 
        try_files /err.html.html 404; 
    } 
    

    P.S.請檢查語法錯誤,以上代碼未經測試。

    1

    (我改寫了這個答案)

    的問題是內部重定向和外部重定向因我的困惑。以下運作良好。 (假設「err.php」正確處理查詢字符串)

    error_page 400 401 402 403 404 500 502 503 504 /err.php?$status; 
    

    如果我想客戶端的JavaScript來處理通過查詢字符串傳遞響應狀態代碼,我應該嘗試另一種方式,作爲Satys說。我可以找到一種方法。

    error_page 400 402 403 404 500 502 503 504 @err; 
    
    location @err { 
        rewrite ^.*$ /err.html?$status redirect; 
    } 
    

    謝謝您的建議,Satys。

    相關問題