加载相对资源的apache别名页面

我正尝试别名path到特定的文件

我试过了:

Alias /Console "/console/console.html" 

现在去http://example.com/Console确实带来了console.html

但从console.html (即, images\1.jpg )引用的任何相对资源失败,因为它似乎去到document_root

我究竟做错了什么?

这是与使用相对URL有关的客户端问题。 由于您正在有效地将/console/console.html的URL重写为/Console ,因此任何相对URL(对于图像,CSS,JS等)现在将相对于文档根目录而不是/console子目录。

你需要“修正”你的相对URL并使它们成为相对的(即以斜杠开始,如/console/images/1.jpg ),或者使它们成为绝对的。

或者,您可以在HTML文档的head包含一个base元素。 这引用了所有相对URL 对于的绝对URL。 换句话说,因为您期待这些相对URL是相对于/console/console.html文档,那么将以下内容添加到head部分:

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

现在,URL /Console文档中引用的诸如images/1.jpg的相对URL将请求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来代替内部重写 。 (而不是外部redirect ,否则会改变URL并导致客户发出第二个请求。)例如:

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