回到1990年代......如何让这个SSI停止抛出指令错误?

时间:2015-11-21 16:28:08

标签: ssi server-side-includes

关于SSI指令如何工作的文档非常少!但是我遵循了非常简单的例子,似乎无法将其调整到我的目的而不会产生错误。我想要做的是显示一个自定义404,根据用户输入的URL(无HTTP_REFERER)或是否有来自其他地方的链接而有所不同。

使用此:

<!--#echo var="HTTP_REFERER" -->

使用假手动输入的uri我得到了这个输出:

(none)

正如所料。所以我设置了这个小测试:

<!--#if var="HTTP_REFERER = (none)" -->
Yep
<!--#else -->
Nope
<!--#endif -->

我明白了:

[an error occurred while processing this directive] Yep

我尝试过其他格式:

<!--#if expr="${HTTP_REFERER} = (none)" -->

<!--#if expr="$HTTP_REFERER = (none)" -->

还有一些我现在不记得的其他人,但他们都会产生同样的事情......他们打印了#34;是的&#34;然后是错误。如果我删除了围绕&#34; none&#34;的括号,则错误消失并正确地说'#34; nope&#34;但这并不是真的有用,因为括号是字符串的一部分。对我来说,可能有一个或两个()必须被转义,所以我尝试了它的每一个组合,我得到错误或者它没有通过测试。

我可以找到关于这个主题的令人震惊的糟糕文档。我意识到它是古老的技术,但cPanel仍然将它用于自定义错误页面。我只是想让我的错误页面变得更聪明一些。

或者,还有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

洛尔。像往常一样,我在发布后几秒钟就知道了。

我终于想到(没有)可能是特别的。所以我应该测试变量是否设置完毕。这是有效的测试:

<!--#if expr="${HTTP_REFERER}"-->
yep
<!--#else -->
Nope
<!--#endif -->

答案 1 :(得分:1)

SSI使用的一个很好的例子是Adamant Analytics。 您question的答案是:

<!--#if expr="$HTTP_REFERER" -->
  <!--#set var="UTM_REFERER" value="$HTTP_REFERER" -->
<!--#endif -->