載入相關資源的apache別名頁面
我正在嘗試為特定文件的路徑別名
我試過:
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
將 requesthttp://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]