【问题标题】:typoscript negate conditions IP / if - if - else排版否定条件 IP / if - if - else
【发布时间】:2016-09-28 13:08:00
【问题描述】:

是否可以用打字稿否定条件?

如果您的 ip 地址在10.*.*.* 范围内,我们有一个页面,其中仅显示部分:

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

这行得通。但是现在我们有以下问题。新的负载均衡器(waf)也有一个内部地址(即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] 

但它也不起作用。

也许有人有解决它的想法!更改负载平衡器-ip 是没有选择的!

谢谢, 英里/小时

【问题讨论】:

    标签: typo3 conditional-statements typoscript


    【解决方案1】:

    您要做的不是改变您的条件,而是将此 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 等问题,因此这是解决问题的正确方法。

    【讨论】:

      【解决方案2】:

      纯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。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 您好,感谢您的回答!我已经实现了一个检查 ip 的 userFuntion php-script - 它正在工作!我通过include_once("myuserfuncfile.php") 将它包含在LocalConfiguration.php 中。我认为,这不是官方方式 - 你能解释一下,我应该在哪里保存和包含这个文件?我正在使用typo3 6.2。
        • 不要使用 LocalConfiguration.php,因为每次更改已安装的扩展和安装工具设置时,都会完全重写此文件。最佳实践是创建一个扩展来存储所有配置、模板等——一个“站点包”。这样你就可以简单地引用 userFunc 中的类和函数名。我链接到的文档建议将其放在 AdditionalConfiguration.php 中(也在typo3conf 目录中)。
        • 谢谢!我现在正在使用 AdditionalConfiguration.php - 完美!
        • 嗨 Jigal,也许你可以回答我以下问题:我已经定义了一个 fe-usergroup “intranet”,它也使用 ip-filter (10.*.*.*)。我可以使用我新定义的 userfunc 作为过滤器吗?
        【解决方案4】:

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

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

        (取自 pi-phi spicker 的友好回答,http://www.pi-phi.de/19.html)

        【讨论】:

        • globalVar 不支持字符串(IP 地址),但支持浮点数/整数。
        • @stmllr 这不是完整的事实。有:
        • arghl ... cmets 不可编辑;enter 提交表单 ... schtäkowerflo ...
        • 所以首先是 globalVar LIT,它基本上支持字面量。其次是 globalString,它与 globalvar 几乎相同,但用于字符串。 globalString 还支持 PCRE 风格的正则表达式。添加所有这些信息后,为所描述的问题做一个排版解决方案应该不难。更多信息:docs.typo3.org/typo3cms/TyposcriptReference/Conditions/…docs.typo3.org/typo3cms/TyposcriptReference/Conditions/…
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-07-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-06
        • 2020-09-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多