基于URI的条件SSI

时间:2010-08-28 23:50:29

标签: apache server-side-includes

我正在重做包含数十个网站页面的导航栏。我想要做的一个更改是根据用户所在的页面更改包含的内容。因此,我的计划基本上是让当前包含的文件充当选择器,以决定要包含哪些实际文件。

从我对Apache SSI Specs的阅读中,我相信我可以通过驱动我的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 个答案:

答案 0 :(得分:1)

mod_include的详细信息中找到答案:

  

以下示例将打印“in foo”   如果DOCUMENT_URI是/foo/file.html,   “在栏中”,如果它是/bar/file.html和   “两者都没有”否则:

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

答案 1 :(得分:0)

SSI expr仍可在使用v函数或%的现代服务器上运行(在Apache / 2.4.18上测试)。您也可以使用文档名称。

示例(对文档名称进行if-test):

const theRef = event.data.ref;
const collectionRef = theRef.parent.child('days');

collectionRef.once('value').then(messagesData => {
  if(messagesData.numChildren() > 1) {
    let updates = {};
    updates['/days'] = null;
    return defaultDatabase.ref().update(updates); // 'days' doesn't get removed even if it has more than 1 child (as in the image)!
  } 
});

return collectionRef;

示例2(文档路径上的if-test):

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