在 SSI 包含中,被包含的文件是否可以重定向到 .htaccess 文件中

在 SSI 包含中,被包含的文件是否可以重定向到 .htaccess 文件中

我有一些旧的 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_到名字。

相关内容