![如何使用 Apache 有条件地处理未定义的 SSI 变量?](https://linux22.com/image/795539/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20Apache%20%E6%9C%89%E6%9D%A1%E4%BB%B6%E5%9C%B0%E5%A4%84%E7%90%86%E6%9C%AA%E5%AE%9A%E4%B9%89%E7%9A%84%20SSI%20%E5%8F%98%E9%87%8F%EF%BC%9F.png)
我想在一组页面中包含一个页眉,如下所示:
header.html
:
<html>
<head>
<title>My site</title>
</head>
为了启用特定于页面的标题,我尝试使用在每个页面中设置的 SSI 变量:
page1.html
:
<!--#set var="TITLE" value="first page" -->
<!--#include file="header.html" -->
然后我修改一下header.html
以使用该变量:
<title>My site - <!--#echo var="TITLE" --></title>
这可以正常工作,但是,当然,它有一个不良影响,即,如果TITLE
没有设置,则结果为:
<title>My site - (none)</title>
因此,我尝试了各种尝试,根据该变量是否存在(例如)来有条件地echo
调整该变量……但似乎没有任何效果。none
<!--#if expr="TITLE != \(none\)" --> ... <!--#endif-->
看起来这是一个相当常见的要求。有人能提供可行的解决方案吗?
答案1
对于 Apache 2.4表达式已改变:
<!--#if expr="-z v('CONTENT_LANGUAGE')"-->
<!--#set var="CONTENT_LANGUAGE" value="en"-->
<!--#endif-->
答案2
我已经成功使用过它:
<!--#if expr="! $CONTENT_LANGUAGE" -->
<!--#set var="CONTENT_LANGUAGE" value="en" -->
<!--#endif -->
答案3
好的,我自己解决了。供其他人参考:
<!--#if expr="${TITLE}!=''" -->
是正确的语法。由于可以配置未定义的文本值,因此您不必检查“(none)”,这是有道理的;我只是没有意识到这种情况发生在检查值之后,而不是之前。