我想為我的服務器上托管的每個域提供自定義錯誤頁面。
我有一個如下的目錄結構
data
defaults
error.html
example.com
misc
error.html
example.net
...
現在我想顯示 misc/error.html 是否存在正在訪問的域名,否則顯示 default/error.html。
我目前有什么不作業是以下。它不起作用,因為如果找不到錯誤頁面 (misc/error.html)(即使錯誤甚至不是 404 錯誤),它只會顯示默認的 nginx 404 頁面。
server_name ~^(www\.)?(?<domain>. )$;
location / {
root /data/$domain;
try_files $uri $uri/ =404;
index index.html index.htm index.php;
}
error_page 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 421 422 423 424 425 426 428 429 431 451 500 501 502 503 504 505 506 507 508 510 511 @error;
location @error {
internal;
ssi on;
auth_basic off;
root /data;
try_files /$domain/misc/error.html /defaults/error.html;
}
uj5u.com熱心網友回復:
最后一個try_files引數的處理方式與所有其他引數不同。如果您仔細閱讀檔案,您會發現它可能是 HTTP 錯誤代碼、命名位置 ID 或要重新評估的新 URI,并且您將/defaults/error.html被視為新 URI。然后nginx嘗試通過主要location / { ... }搜索error.html目錄下的檔案來服務它/data/$domain/defaults。并且由于該/data/$domain/defaults/error.html檔案不存在,它會回傳一個內置的 404 錯誤頁面(它不會嘗試兩次自定義錯誤頁面)。try_files將您的指令從錯誤處理程式更改為類似
try_files /$domain/misc/error.html /defaults/error.html =404;
應該解決這種情況。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/430376.html
上一篇:對缺少的非空屬性強制例外
