我正尝试别名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]