我有一些旧的 html 页面,其中包含 SSI,以便在所有页面中包含某些 html。
因此,SSI 看起来像这样:
<!--#include virtual="/includes/noNav/footercode.html"-->
但是我想将包含的文件从 /includes/noNav/footercode.html 移动到 /includes/footercode.html,因此我在 .htaccess 文件中实现了重定向,如下所示:
# Redirect permanent /includes/noNav/footercode.html http://intranet.myorg.org/includes/footercode.html
但是现在我收到错误提示“无法在解析的文件中包括“/includes/noNav/footercode.html””那么,重定向对包含的文件不起作用吗?
另外,如果我直接浏览旧路径,它会正确地重定向我。但如果包含路径,它会失败。
答案1
SSI 是作为 Apache SSI 模块的一部分进行解析的,不会向 Apache 发出 Web 请求来检索文件。由于它不使用 HTTP 向 Apache 发出请求来检索 #include 指定的文件,因此不会应用任何重写或重定向规则。
virtual= 指令查找从 ServerRoot 开始的文件,而 file= 指令查找与当前页面位于同一目录中的文件。
答案2
你想要完成的事情实际上可以通过重写(带mod_rewrite
)而不是重定向。您的.htaccess
应更改为:
RewriteRule /includes/noNav/footercode.html /includes/footercode.html
该文件仍可作为/包括/noNav/footercode.html但内容/包括/footercode.html将被送达。请注意,如果您尚未启用重写,则需要启用重写:
RewriteEngine on
并且某些变量的名称可能会更改为前缀REDIRECT_到名字。