在一个SSI中,包含的文件是否可以被redirect到.htaccess文件中

我有一些旧的HTML页面,其中包括SSI包括在所有页面中的某些HTML。

所以,SSI看起来像这样:

<!--#include virtual="/includes/noNav/footercode.html"--> 

但是我想将包含的文件从/includes/noNav/footercode.html移动到/includes/footercode.html,所以我在.htaccess文件中实现了这样的redirect

 # Redirect permanent /includes/noNav/footercode.html http://intranet.myorg.org/includes/footercode.html 

但是现在我得到错误说“无法包含”/includes/noNav/footercode.html“在parsing文件”所以,redirect不能在包含的文件上工作?

另外,如果我直接浏览到旧path,它将正确地redirect我。 但是,如果包含path,则会失败。

SSI被parsing为apache SSI模块的一部分,并且不会将web请求返回给Apache以检索文件。 由于它不使用HTTP返回Apache来检索由#include指定的文件,因此不会应用重写或redirect规则。

virtual =伪指令从ServerRoot中find一个文件,而file =伪指令在当前页面的相同目录中find一个文件。

你试图完成的事情实际上可以通过重写 (使用mod_rewrite )而不是redirect来完成。 你的.htaccess应该改成:

 RewriteRule /includes/noNav/footercode.html /includes/footercode.html 

该文件仍然可以/includes/noNav/footercode.html访问,但是/includes/footercode.html的内容将被提供。 请注意,如果您尚未这样做,则需要启用重写:

 RewriteEngine on 

而且有些variables可能会将其名称更改为将REDIRECT_添加到名称。