Apache-2.4

載入相關資源的apache別名頁面

  • June 6, 2017

我正在嘗試為特定文件的路徑別名

我試過:

Alias /Console "/console/console.html"

現在去http://example.com/Console確實帶來了console.html

console.html但是從內部(即)引用的任何相關資源都images\1.jpg失敗了,因為它似乎進入了 document_root

我究竟做錯了什麼?

這是與您使用相對 URL 相關的客戶端問題。/console/console.html由於您正在有效地從to重寫 URL /Console,因此任何相對 URL(到圖像、CSS、JS 等)現在都將相對於文件根目錄而不是/console子目錄。

您需要“修復”您的相對 URL 並使它們與根相對(即以斜杠開頭,如/console/images/1.jpg)或使它們絕對。

或者,您可以在HTML 文件base的部分中包含一個元素。head這引用了所有相對 URL 都相對的絕對 URL 。換句話說,由於您希望這些相對 URL 與/console/console.html文件相關,因此將以下內容添加到該head部分:

<base href="http://example.com/console/console.html">

現在,一個相對 URL,例如images/1.jpg在文件中引用的 URL/Console將 request http://example.com/console/images/1.jpg,而不是http://example.com/images/1.jpg.

但是,使用該base元素有一些注意事項。值得注意的是,如果您有使用片段標識符的頁內相對連結,例如href="#some-id". 這現在也與您的base元素相關,因此頁內連結現在可能已損壞。解決此問題的唯一方法是完全限定連結。

參考:

https ://developer.mozilla.org/en-US/docs/Web/HTML/Element/base


但是,Alias映射到單個文件時使用的指令不是正確的,因為Alias是前綴匹配,所以/Console/foo也會映射到/console/console.html/foo。您也許可以AliasMatch改用:

AliasMatch ^/Console$ /console/console.html

這將只映射/Console

或者,您可以改用 mod_rewrite 並發出內部 rewrite。(與外部重定向相反,外部重定向會更改 URL 並導致客戶端發出第二個請求。)例如:

RewriteEngine On
RewriteRule ^/?Console$ /console/console.html [L]

引用自:https://serverfault.com/questions/835292