Использование Apache на стороне сервера управления потоком в PHP?
Как уже обсуждалось в этом вопросе, я использую Apache mod_include с условными операторами управления потоком для изменения поведения включенных shtml-файлов в зависимости от URL родительской страницы. У меня проблема в том, что некоторые страницы сайта являются страницами PHP, что, по-видимому, означает, что директивы mod_include игнорируются (и вместо этого рассматриваются как стандартные html-комментарии).
Есть ли способ, чтобы страницы PHP правильно обрабатывали эти директивы mod_include?
В частности, вот что я пытаюсь обработать:
<!--#if expr='"$DOCUMENT_NAME" = /(podcasts\.php)|(series\.php)/' -->
<li id="features" class="current">
<!--#else -->
<li id="features">
<!--#endif -->
Подобные блоки строк работают в файлах.shtml на сайте, но для страниц php все вышеперечисленное заканчивается выводом на клиент.
Редактировать: Самое близкое к решению, которое я придумала, это имитировать функциональность включенного shtml-файла в php-файле. Мне не нравится это решение, потому что оно означает, что добавление ссылок в будущем потребует добавления их в несколько мест.
2 ответа
Предполагая, что вы используете PHP через mod_php (может даже не иметь значения), просто добавив:
AddOutputFilter INCLUDES .shtml .php
и он отлично работает как для.shtml, так и для.php, причем оба они правильно проанализированы.
Я только начал читать о SSI, но нашел эту цитату на http://httpd.apache.org/docs/2.2/howto/ssi.html
Краткий комментарий о том, что не следует делать. Иногда вы будете встречать людей, которые рекомендуют вам просто попросить Apache проанализировать все файлы.html для SSI, чтобы вам не приходилось связываться с именами файлов.shtml. Эти люди, возможно, не слышали о XBitHack. Имейте в виду, что для этого вам необходимо, чтобы Apache прочитал каждый отдельный файл, который он отправляет клиентам, даже если они не содержат директив SSI. Это может немного замедлить ход событий, и это не очень хорошая идея.
Так что, если я правильно понимаю, вы не должны включать.php в AddOutputFilter, так как если заставляет Apache искать все страницы.php для директив SSI, так как это замедлит работу сервера.
Может быть, есть другое решение вашей проблемы?
http://httpd.apache.org/docs/2.2/mod/mod_include.html
/Philip