Условный SSI на основе URI

Я переделываю панель навигации, которая включает в себя несколько десятков страниц моего сайта. Одно из изменений, которое я хочу внести, - это изменение содержимого, которое включено, в зависимости от страницы, на которой находится пользователь. Таким образом, мой план состоит в том, чтобы файл, который в настоящее время включен везде, действовал как селектор, чтобы решить, какие фактические файлы включить.

Из моего прочтения спецификаций Apache SSI я считаю, что могу сделать это с помощью условных выражений, управляющих моим SSI. Что-то вроде:

<!--#if expr="[URI is page1.shtml]" -->
<!--#include virtual="page1contents.shtml" -->
<!--#elif expr="[URI is page2.shtml]" -->
<!--#include virtual="page2contents.shtml" -->
<!--#endif -->

Мой вопрос, то, что должно идти в [URI is page1] часть этого, чтобы фактически проверить условие, в котором я заинтересован?

2 ответа

Решение

Нашел ответ в деталях mod_include:

В приведенном ниже примере будет напечатано "in foo", если DOCUMENT_URI равен /foo/file.html, "in bar", если это /bar/file.html, и "in none" в противном случае:

<!--#if expr='"$DOCUMENT_URI" = "/foo/file.html"' -->
in foo
<!--#elif expr='"$DOCUMENT_URI" = "/bar/file.html"' -->
in bar
<!--#else -->
in neither
<!--#endif -->

SSI expr по-прежнему работает на современных серверах с использованием функции v или% (протестировано на Apache/2.4.18). Вы также можете использовать название документа.

Пример (if-test для имени документа):

<!--#if expr='v("DOCUMENT_NAME")=~/about.html/'-->
<a class="active" href="#">
<!--#else -->
<a href="about.html">
<!--#endif -->
About</a>

Пример 2 (if-test для пути к документу):

<!--#if expr="%{DOCUMENT_URI} =~ /product/"-->
Product path
<!--#else-->
Some other path
<!--#endif-->
Другие вопросы по тегам