2015-11-21 17 views
1

有关SSI指令如何工作的文档非常少!但我遵循非常简单的例子,似乎无法调整它们以达到我的目的而不会抛出错误。我想要做的是显示一个自定义的404,根据用户是否键入URL(无HTTP_REFERER)或者是否有其他地方的链接而不同。回到1990年代......如何让SSI停止投掷指令错误?

使用此:

<!--#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)" --> 

和其他一些我不现在回想起来,但他们都产生了同样的事情......他们打印“是”,然后是错误。如果我删除括号“none”的括号,错误消失了,它正确地表示“nope”,但这并不真正有帮助,因为括号是字符串的一部分。这让我大吃一惊,也许这两个()中的一个或两个都必须逃脱,所以我尝试了所有的组合,并且我得到了错误或者测试失败。

我可以找到这个主题令人震惊的文档。我意识到这是古老的技术,但cPanel仍然使用它来定制错误页面。我只是想让我的错误页面更聪明一些。

或者,有没有更好的方法?

回答

2

大声笑。像往常一样,我在发布后的数秒后就知道了。

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

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

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

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