跳至內容

網路伺服器目錄索引

出自Taiwan Tongues 繁中維基
這是此頁批准,以及是最近的修訂。

當一個 HTTP 用戶端(通常是網頁瀏覽器)請求一個指向目錄結構而非該結構中實際網頁的 URL 時,網頁伺服器通常會提供一個預設頁面,這個頁面常被稱為主頁面或「索引」頁面。

這類頁面的常見檔名是 `index.html`,但多數現代 HTTP 伺服器都提供一個可設定的檔名列表,讓伺服器能將這些檔案作為索引使用。若伺服器設定為支援伺服器端指令碼,該列表通常會包含允許使用動態內容作為索引頁面的項目(例如 `index.cgi`、`index.pl`、`index.php`、`index.shtml`、`index.jsp`、`default.asp`),即使更恰當的做法可能仍是指定 HTML 輸出(`index.html.php` 或 `index.html.aspx`),因為這點不該被視為理所當然。一個例子是廣受歡迎的開源網頁伺服器 Apache,其檔名列表是由主伺服器設定檔或該目錄設定檔中的 DirectoryIndex 指令所控制。完全不使用副檔名,對內容傳遞方式保持中立,並設定伺服器透過內容協商自動挑選最佳檔案,也是可行的作法。

如果伺服器在其設定中找不到任何列表中的檔案名稱,它可能會回傳一個錯誤(通常是 403 禁止索引列表或 404 找不到頁面),或是產生一個列出目錄中檔案的索引頁面。這個選項通常稱為 `autoindex`,並且也是可設定的。

歷史

網頁伺服器為每個子目錄提供預設檔案的機制,最早在 NCSA HTTPd 0.3beta(1993年4月22日)中就已支援,其預設會在目錄中提供 `index.html` 檔案。此機制後來被 CERN HTTPd 採用,至少從 2.17beta 版本(1994年4月5日)開始,其預設除了支援源自 NCSA 的 `index.html` 外,還支援 `Welcome.html` 和 `welcome.html`。

後來的網頁伺服器通常都以某種形式支援這種預設檔案機制;這通常是可設定的,而 `index.html` 則是預設檔名之一。

實作

在某些情況下,網站的首頁可能是一個語言選項選單,適用於使用地理定位的大型網站。透過內容協商等方式,也可以避免這個步驟。

當給定目錄中不存在任何已知的 `index.*` 檔案時,網頁伺服器可以被設定為提供一個自動產生的目錄內檔案列表。以 Apache 網頁伺服器為例,此行為由 mod_autoindex 模組提供,並由網頁伺服器設定檔中的 `Options +Indexes` 指令控制。這些自動產生的目錄列表有時會帶來安全風險,因為它們會列舉出可能不應對外公開的敏感檔案,此過程被稱為目錄索引攻擊。這樣的安全性設定錯誤也可能助長其他攻擊,例如路徑遍歷攻擊或目錄遍歷攻擊。

效能

當存取一個目錄時,各種可用的索引方法可能對作業系統資源(RAM、CPU 時間等)的使用產生不同影響,進而影響網頁伺服器的效能。

以下列表由最快到最慢的方法排序:

  • 使用靜態索引檔案,例如:`index.html` 等;
  • 使用網頁伺服器通常名為 autoindex 的功能(當索引檔案不存在時),讓網頁伺服器透過其內部模組自動產生目錄列表;
  • 使用由網頁伺服器內部程式直譯器讀取的直譯式檔案,例如:`index.php`;
  • 使用 CGI 可執行檔與已編譯程式,例如:`index.cgi`。

參考資料