Может ли включаемый файл включать SSI-файл в файл.htaccess?
У меня есть несколько старых HTML-страниц, которые включают в себя SSI, чтобы включить определенный HTML-код на всех страницах.
Итак, SSI выглядит примерно так:
<!--#include virtual="/includes/noNav/footercode.html"-->
Но я хочу переместить этот включенный файл из /include/noNav/footercode.html в /include/footercode.html, чтобы я реализовал перенаправление в файле.htaccess, например так:
# Redirect permanent /includes/noNav/footercode.html http://intranet.myorg.org/includes/footercode.html
Но теперь я получаю сообщение об ошибке "невозможно включить" /include/noNav/footercode.html "в разобранном файле". Итак, перенаправления не работают на включенных файлах?
Кроме того, если я перейду прямо к старому пути, он правильно перенаправит меня. Но это не удастся, если путь включен.
2 ответа
SSI анализируется как часть модуля SSI apache и не отправляет веб-запросы обратно в Apache для получения файла. Поскольку он не использует HTTP обратно в Apache для извлечения файлов, указанных #include, правила перезаписи или перенаправления не применяются.
Директива virtual = находит файл, начинающийся с ServerRoot, а директива file = находит файл в том же каталоге, что и текущая страница.
То, что вы пытаетесь достичь, на самом деле может быть сделано путем переписывания (с mod_rewrite
) в отличие от перенаправления. Ваш .htaccess
следует изменить на:
RewriteRule /includes/noNav/footercode.html /includes/footercode.html
Файл по-прежнему будет доступен как /include/noNav/footercode.html, но будет предоставлено содержимое файла /include/footercode.html. Имейте в виду, что вам нужно включить перезапись, если вы еще этого не сделали:
RewriteEngine on
И что некоторые переменные могут изменить свои имена, добавив к имени REDIRECT_.