解決Vue用Nginx做web服務器報錯favicon.ico 404 (Not Found)的問題


  有多種解決方案

1、vue靜態資源

  vue中為網頁增加favicon的最便捷的方式為使用link標簽

<link rel="shortcut icon" type="image/x-icon" href="./static/favicon.ico" rel="external nofollow" />

  先在static目錄下添加favicon,至於為什么要在static下加,待會解釋

  然后,在index.html入口加上引入的link標簽

<link href="./static/favicon.ico" mce_href="./static/favicon.ico" rel="icon" type="image/x-icon">

  然后build打包即可,就不會再報這個錯誤。

解釋:

  從href屬性我們可以知道,這個favicon.ico文件被放在static文件夾下。那可不可以像平時的網頁那樣放在根目錄下呢?

  本人測試為false。比如我把其放在src/assets下面,bulid出來發現沒有這個favicon.ico這個文件。

  使用vue-cli構建vue項目的最后一步為build,build后得到一個dist文件夾,目錄如下:

dist ├── index.html └── static ├── css │ ├── app.98d86b95fddce7c6712349c91fd3ac42.css │ └── app.98d86b95fddce7c6712349c91fd3ac42.css.map ├── favicon.ico ├── img │ └── icon.b36fe83.png └── js ├── app.8fece2e344934ca56814.js ├── app.8fece2e344934ca56814.js.map ├── manifest.1f0d87f2abce4b6b3d40.js ├── manifest.1f0d87f2abce4b6b3d40.js.map ├── vendor.6e85d686677580e84eb8.js └── vendor.6e85d686677580e84eb8.js.map

  當將這個文件放在根目錄下的時候,build出來的項目里不會含有favicon.ico文件。

  從static的字面意思來講,靜態的,除了文件的靜態性,還包含有文件路徑的靜態性。build前后index.html都有同級目錄的static文件夾,因此build前后引用的路徑不會發生改變。個人猜測跟webpack的打包方式有關,它會去拷貝一個static文件夾,然后在往里面添加打包后的文件(不知這樣理解的是否正確)

2、nginx配置

  Nginx的error日志中會定期抱怨說沒有找到favicon.ico文件?發生這種錯誤的原因一般是Nginx在根目錄上找不到這個文件。我們可以在網上下載一個ico文件放在根目錄下面就可以了。

  但是現在的業務場景有些區別:我使用Nginx作為前台服務器,在80端口接收所有的http請求,對本地能緩存的資源直接提供服務,否則轉發到upstream上的其他服務器處理,比如轉給fastDFS,或者是ATS等等。

  我現在在根目錄下存放一個ico文件,如何讓Nginx直接去本地拿這個文件,而不轉發給其他服務器呢?直接在nginx.conf中增加下面一行就可以了:

    # set site favicon location /favicon.ico { root html; } 

  這樣就可以正常看到ico圖標了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM