У меня есть несколько старых 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» в проанализированный файл «Итак, перенаправления не работают с включенными файлами?
Кроме того, если я перейду прямо на старый путь, он правильно перенаправит меня. Но это не удается, если путь включен.
SSI анализируется как часть модуля apache SSI и не отправляет веб-запросы обратно в Apache для получения файла. Поскольку он не использует HTTP обратно в Apache для получения файлов, указанных в #include, правила перезаписи или перенаправления не применяются.
Директива virtual = находит файл, начинающийся с ServerRoot, а директива file = находит файл в том же каталоге, что и текущая страница.
То, что вы пытаетесь достичь, на самом деле можно сделать с помощью переписывает (с участием mod_rewrite
) в отличие от перенаправления. Ваш .htaccess
следует изменить на:
RewriteRule /includes/noNav/footercode.html /includes/footercode.html
Файл по-прежнему будет доступен как /includes/noNav/footercode.html но содержание /includes/footercode.html будет обслуживаться. Имейте в виду, что вам нужно включить перезапись, если вы еще этого не сделали:
RewriteEngine on
И что имена некоторых переменных могут быть изменены, чтобы добавить REDIRECT_ к имени.