如何在Smarty模板(.tpl)中实现指定域名判断逻辑
在Smarty模板中判断指定域名的正确实现
正确的基础写法
直接使用Smarty全局变量,注意使用普通引号而非HTML实体转义的引号:
{if $smarty.server.HTTP_HOST == 'myexamdomain.com'} <!-- 这里编写你的业务逻辑 --> {/if}
你之前写法失效的常见原因及解决办法
- 引号转义错误:你代码里的
"是HTML实体转义字符,Smarty会把它当作字符串的一部分处理,导致无法匹配正确域名,直接替换成单引号或双引号即可。 - 大小写不匹配:部分环境下
HTTP_HOST的值可能存在大小写差异(比如MyExamDomain.com),如果需要忽略大小写匹配,使用lower修饰符:{if $smarty.server.HTTP_HOST|lower == 'myexamdomain.com'} <!-- 忽略大小写的逻辑代码 --> {/if} - 域名带端口号:如果访问时附带了端口(比如
myexamdomain.com:8080),直接匹配纯域名会失败,可通过正则兼容这种场景:{if preg_match('/^myexamdomain\.com(:\d+)?$/', $smarty.server.HTTP_HOST)} <!-- 兼容带端口的判断逻辑 --> {/if} - Smarty全局变量权限限制:若你的环境禁用了
$smarty.server这类全局变量的直接访问,可在PHP端手动传递变量:
然后在模板中使用:// PHP代码中赋值 $smarty->assign('current_host', $_SERVER['HTTP_HOST']);{if $current_host == 'myexamdomain.com'} <!-- 业务逻辑 --> {/if}
内容的提问来源于stack exchange,提问作者Aldhy
相关产品推荐
相关产品推荐

