<base href="/"> 與 <base href="./"> 的差別 ?

今天在發佈一個專案時, 突然發現 ng build 上傳專案後

出現大量類似以下的錯誤

Failed to load resource: net::ERR_FILE_NOT_FOUND file:///D:/css/app.css

經過 Google 後, 找到答案是把

base href “/” 換成 ="./"

就可以了 , 我也確實解決了問題

我大致能理解, 這是一個相對路徑的問題

但是, 我不理解, 為什麼有的專案發布時要採用
base href = “/”

有的要採用
base href="./"

有哪位大大知道其原理與原因嗎 ?

PS : 這些專案, 在本地開發期間 ( npm start ) 都可以正常執行, 沒有任何差別

你的跑網站是用哪一個服務在跑? iis 或是其他的

SERVER 2008 R2 上的 IIS , 不過我在本地的 disp 資料夾, 跑的結果一樣

因為首頁不必登入的頁面就打不開了

這 2 天沒空上傳到 Linux 主機, 但我相信結果會是一樣的

提供我在 Github 上找到答案的文

不過, 上面我看不出有明確的原理解釋

那篇 issue 的答案並無法解釋為什麼 ./ 可以跑,因為就我在使用上來說, 我的 base 位置從沒有改變過,但也沒有遇到你的那個問題,所以針對你原本的疑問,還是沒有正解 :tired_face:

是啊, 那個回答者 Myrga 她就沒解釋為什麼

所以我才上來問 :roll_eyes:

因為我很久以前有看過別人的 Template 是 ./ 的

我還以為對方打錯了。

結果, 這次自己遇到, 更有意思的是, 我看這文章好像很多人有遇過類似的問題

:sweat_smile:

在 Angular 裡面,如果用 <base href="./"> 遲早有一天會掛掉,即便現在是好的。

看這個錯誤訊息 Failed to load resource: net::ERR_FILE_NOT_FOUND file:///D:/css/app.css 很明顯是路徑寫錯,要從源頭查問題,不應該直接改 <base href="./"> 才對。

保哥, 你好

不是這樣子的, 路徑一直應該是對的

D:/css/app.css 是 Git 上的範例,

我來 SHOW 一下我這的狀況!

但, 只要改成 ./ 就好了

我就是不想改 ./ 才上來問的

但是, 都找不到原因與說法

會因為是放在 IIS 下的

虛擬目錄下的關係嗎 ?

我剛發現只要不是放虛擬目錄下, 就好了 ( 但 F12 有其他錯訊訊息, 沒空細看, 但至少有跑起來 )

剛好之前的專案都是直接放在 http://xxx.xxx.xxx.xxx

第一次把專案放到

http://xxx.xxx.xxx.xxx/apptest

早上有會,先閃了, 等等再試

正常的網址,不可能長這樣 D:/css/app.css,放上 IIS 更不可能是這樣,這種網址不能讓其他人瀏覽耶。

我無法理解你為什麼要用 D:/css/ 這種路徑?

保哥, 你好

是的…

這是一個蠢事

因為為了在這個論壇發佈這個問題 ,

我一不小心 COPY 問題時 把本地的 disp 打開 再按 F12

把問題貼了上來, 路徑就變這樣子了

不過, 無妨, 我應該找到原因了…

最原始的問題原因

這是因為 Angular deploy 到 subfolder 找不到路徑的問題

因為我是第一次發布一個專案到 subfolder

所以 ng build -prod --base-href /mysubfolder/

己經解決了問題

感謝 2 位的幫忙

PS : base href ="./" 就發生問題時, 剛好 Google 到, 又剛好能解

    不過, 我想那不是正確的解法吧

想請教一下為什麼 angular 內如果用 <base href="./"> 遲早有一天會掛掉

當你用了 Child Route 的時候就會掛掉,所有網址都會出現錯誤。

1個讚