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