我正在尝试将路径别名化为特定文件
我试过:
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]