如何在TYPO3 7.6中用getIndpEnv:TYPO3_REQUEST_HOST动态设置config.baseURL?
解决TYPO3多站点动态设置baseURL的问题
当然可行!你遇到的问题是因为TypoScript里调用getIndpEnv的语法不对,两种写法都不符合TYPO3的TypoScript规则,所以才会失效。下面给你拆解问题和正确的实现方式:
为什么你的写法失败?
- 写法一
config.baseURL = {getIndpEnv : TYPO3_REQUEST_HOST}:TypoScript里的大括号{}并不是用来插值环境变量的,它是用于对象嵌套的语法,所以TYPO3会直接把整个字符串{getIndpEnv : TYPO3_REQUEST_HOST}作为baseURL的值返回,自然达不到预期效果。 - 写法二
config.baseURL = getIndpEnv : TYPO3_REQUEST_HOST:这种写法会被TYPO3当成普通文本字符串处理,根本不会触发getIndpEnv的变量获取逻辑,所以完全无效。
正确的实现方式
根据你的TYPO3版本,分两种场景处理:
场景1:TYPO3 8及以下(或仍在使用config.baseURL的项目)
要动态获取主机名并设置baseURL,需要用TypoScript的stdWrap机制来调用getIndpEnv:
# 先清空baseURL的默认值 config.baseURL = # 获取主机名(比如:example.com) config.baseURL.data = getIndpEnv:TYPO3_REQUEST_HOST # 包裹协议前缀和末尾斜杠,组成完整的baseURL config.baseURL.wrap = https://|/
如果需要自动识别HTTP/HTTPS协议,可以结合TYPO3_REQUEST_PROTOCOL变量:
config.baseURL = # 获取协议(http://或https://) config.baseURL.data = getIndpEnv:TYPO3_REQUEST_PROTOCOL # 追加主机名 config.baseURL.append.data = getIndpEnv:TYPO3_REQUEST_HOST # 追加末尾斜杠 config.baseURL.append.wrap = |/
场景2:TYPO3 9+(使用站点管理Site Configuration)
从TYPO3 9开始,官方推荐使用站点配置来管理每个站点的base地址,config.baseURL也被config.base取代。你可以在站点的config.yaml里动态设置:
base: 'https://%env(TYPO3_REQUEST_HOST)%/'
或者在TypoScript里用更简洁的写法:
config.base = config.base.data = getIndpEnv:TYPO3_REQUEST_PROTOCOL config.base.append.data = getIndpEnv:TYPO3_REQUEST_HOST config.base.append.wrap = |/
测试小技巧
如果不确定getIndpEnv是否正确获取到值,可以临时在TypoScript里添加一段测试代码,在页面上输出变量内容:
page.20 = TEXT page.20.data = getIndpEnv:TYPO3_REQUEST_HOST page.20.wrap = 当前主机名:<strong>|</strong>
内容的提问来源于stack exchange,提问作者distante
相关产品推荐
相关产品推荐

