typoscript否定条件IP / if - if - else

时间:2016-09-28 13:08:00

标签: typo3 conditional-statements typoscript

是否有可能用typoscript否定一个条件?

如果您的IP地址在10.*.*.*范围内,我们有一个只能看到部分的页面:

[IP=10.*.*.*]
  # show internal content
[global]

这很有效。但现在我们有以下问题。新的loadbalancer(waf)也有一个iternal地址(即10.1.2.3),因此内部内容以上述条件显示! 不幸的是,对IP条件的否定并不起作用。我试过了:

[IP=10.*.*.*] && [IP!=10.1.2.3]

否定条件的工作解决方案是:

[IP=10.1.2.3]
  # do nothing
[ELSE]
  # show internal content
[global] 

但我也需要条件[IP=10.*.*.*]! 我也试过

[IP=10.1.2.3]
  # do nothing
[IP=10.*.*.*]
  # show internal content
[global] 

但它也不起作用。

也许有人有想法解决它!更改loadbalancer-ip是没有选择的!

谢谢, 英里每小时

4 个答案:

答案 0 :(得分:2)

您要做的不是改变您的条件,而是将此IP标记为反向代理,如:

  

$ GLOBALS ['TYPO3_CONF_VARS'] ['SYS'] ['reverseProxyIP'] = '10 .1.2.3';   $ GLOBALS ['TYPO3_CONF_VARS'] ['SYS'] ['reverseProxyHeaderMultiValue'] ='last';

这不使用您的负载均衡器的IP,而是使用用于连接它的原始IP。因此,您的条件将像以前一样工作(假设您的负载均衡器设置了正确的X-Forwarded-For标头)。

您希望这样做是因为这不仅可以解决这些问题,还可以解决日志记录(登录尝试的TYPO3 sys_log),IP-Auth等问题,因此这是解决问题的正确方法。

答案 1 :(得分:1)

纯粹的TypoScript有一种方法:

TS常数:

[IP=10.1.2.3]
[else]
  temp.noWaf = 1
[end]

TS设置:

[IP = 10.*.*.*] && [globalVar = LIT:1 = {$temp.noWaf}]
  # show internal content
[end]

然而,将逻辑拆分为TS常量和设置是恕我直言。使用globalVar = LIT很难阅读。

最后,我的一些清理工作失败了,例如使用LIT:0!= LIT:1

答案 2 :(得分:0)

我会使用userFunc。要检索IP地址,您可以使用st并比较IP地址GeneralUtility::getIndpEnv('REMOTE_ADDR')

答案 3 :(得分:-1)

在主题中对您的问题的基本答案:是的,这是可能的,我已经这样做了,这里是一个例子:

[browser = msie] && [version =  <7] && [globalVar = TSFE:id != 100]

(从pi-phi spicker,http://www.pi-phi.de/19.html

回答友好