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

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

我正在尝试将路径别名化为特定文件

我试过:

Alias /Console "/console/console.html"

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

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

我究竟做错了什么?

答案1

这是与您使用相对 URL 相关的客户端问题。由于您实际上是将 URL 从 重写/console/console.html/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将请求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 并发出内部重写.(与外部重定向否则会改变 URL 并导致客户端发出第二个请求。例如:

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

相关内容