問題由來
昨天一網友在segmentfault.com上提問,無法做404重定向
打開對方的網站隨便輸入一個錯誤的地址發現給出了404代碼,但是頁面完全空白,並沒有顯示404頁面的設定內容
當時就明白啥情況了,只要在nginx.conf配置文件上加上一句 fastcgi_intercept_errors on,就可以了
如果沒這句的不管是error_page 還是nginx自帶的404跳轉都不能正常顯示(訪問不存在的php頁面時可能會顯示“No input file specified.”)
什么是404頁面
如果碰巧網站出了問題,或者用戶試圖訪問一個並不存在的頁面時,此時服務器會返回代碼為404的錯誤信息,此時對應頁面就是404頁面。404頁面的默認內容和具體的服務器有關。如果后台用的是NGINX服務器,那么404頁面的內容則為:404 Not Found
NGINX下如何自定義404頁面
1、更改nginx.conf在http定義區域加入: proxy_intercept_errors或者fastcgi_intercept_errors
2、更改nginx.conf,在server 區域加入: error_page 404 /404.html 或者 error_page 404 =http://www.xxx.com/404.html
3、更改后重啟nginx,,測試nginx.conf正確性
#502 等錯誤可以用同樣的方法來配置。
error_page 500 502 503 504 /50x.html;
error_page 500 501 502 503 504 @errpage;
location @errpage {
access_log logs/access.log maintry;
proxy_pass url;
}
注意事項:
1、要添加:fastcgi_intercept_errors on 或者 proxy_intercept_errors
- 默認: fastcgi_intercept_errors off
- 添加位置: http, server, location
- 默認情況下,nginx不支持自定義404錯誤頁面,只有這個指令被設置為on,nginx才支持將404錯誤重定向
這個指令指定是否傳遞4xx和5xx錯誤信息到客戶端,或者允許nginx使用error_page處理錯誤信息。你必須明確的在error_page中指定處理方法使這個參數有效
2.不要出於省事或者提高首頁權重的目的將首頁指定為404錯誤頁面,也不要用其它方法跳轉到首頁
3.自定義的404頁面必須大於512字節,否則可能會出現IE默認的404頁面。例如,假設自定義了404.html,大小只有11個字節(內容為:404錯誤)
