天天看點

Umi&React打包部署到非根目錄及重新整理報錯404的問題解決

在開發中可能一個項目包含多個子項目,如前端項目和背景管理的項目放在同一個伺服器目錄中。

前端項目位址是

www.w3h5.com

,背景管理項目位址是

www.w3h5.com/admin

這樣會遇到一個問題,本地開發是好的,部署後就沒反應了,頁面無法正常打開,而且沒有報錯?

沒有報錯! 這是應用部署在非根路徑的典型現象。為啥會有這個問題?因為路由沒有比對上,比如你把應用部署在

/xxx/

下,然後通路

/xxx/hello

,而代碼裡比對的是

/hello

,那就比對不上了,而又沒有定義 fallback 的路由,比如 404,那就會顯示空白頁。

可通過配置 base 解決,找到配置檔案

/.umirc.ts

添加如下配置。

export default defineConfig({
  base: '/path/ourAppRoot',
  // ...
};           

複制

也會遇到首頁可以打開,比較輸入路由位址就打不開了,在首頁點選菜單可以通路,但是重新整理就又不行了。

這時需要修改一下伺服器的配置,以 Nginx 為例:(Nginx配置檔案位置為

/etc/nginx/nginx.conf

server {
  # ...

  location / {
    # ...
    # 增加下列指令, index.html 可換為項目中使用的其它檔案名
    try_files $uri $uri/ /index.html;
  }
}           

複制

知識擴充:

Nginx 的

try_files

指令的使用方式有兩種:

try_files file ... uri;
try_files file ... =code;           

複制

該指令用于根據指定的參數依次檢查尋找對應的檔案,若所有檔案都找不到将會在内部重定向至最後一個參數指定的檔案。

當使用

=code

時,代表若找不到對應的檔案将傳回

code

對應的錯誤。

uri 代表請求的檔案及其路徑,uri/ 表示對應路徑的目錄。

例如請求 http://example.com/page 時,uri 表示資源目錄下是否存在名為 page 的檔案,uri/ 表示名為 page 的目錄。

是以,我們在配置檔案中增加的指令表示接收到請求時先尋找

uri

對應的檔案或目錄,若不存在則傳回

index.html

檔案。

未經允許不得轉載:w3h5 » Umi&React打包部署到非根目錄及重新整理報錯404的問題解決