Answers:
此错误消息来自于Drupal 8中添加的一项功能,该功能可以防止HTTP Host标头攻击。在为修补程序生成的更改记录中也描述了该功能。
从本质上讲,可以出于恶意目的欺骗HTTP Host标头,并欺骗Drupal在多个子系统中使用不同的域名(尤其是链接生成)。换句话说,需要将HTTP Host标头视为用户输入,而不是受信任的。
为了解决这个问题,$settings['trusted_host_patterns']
在Drupal 8中添加了一个新设置,以配置可从其运行站点的“可信”主机名列表。该设置必须是一个不带分隔符的正则表达式模式数组,代表要允许其运行的主机名。
例如,如果您通过单个主机名“ www.example.com”运行网站,则应将其添加到设置中(通常位于./sites/default/settings.php
):
$settings['trusted_host_patterns'] = array(
'^www\.example\.com$',
);
请注意^
,\.
和$
。这些是PCRE语法。这些仅表示您希望精确匹配“ www.example.com”,在开头和结尾都没有多余的内容,并且应将点视为点而不是通配符。
如果您从“ example.com”运行,则只需使用:
$settings['trusted_host_patterns'] = array(
'^example\.com$',
);
如果您需要运行一个包含多个域和/或子域的站点,并且不执行规范的URL重定向,则您的设置应如下所示:
$settings['trusted_host_patterns'] = array(
'^example\.com$',
'^.+\.example\.com$',
'^example\.org',
'^.+\.example\.org',
);
这使网站可以运行example.com和example.org的所有变体,并包括所有子域。
调整$settings['trusted_host_patterns']
到适当的值后,您应该能够再次浏览到您的站点。
您还可以从状态报告页面(位于admin / reports / status)上检查受信任主机设置的状态。
如果完全删除该设置,则不会使用受信任的主机机制,并且会在状态报告页面上看到错误。此外,您的站点还可能受到HTTP Host标头攻击。
如果配置了此设置并看到此消息,则可能意味着您弄乱了正则表达式语法。在这种情况下,请使用第一个示例,然后将其复制/粘贴到您的设置中,然后对其进行编辑以反映您的网站运行所在的主机名。
对于本地主机安装,您可以在settings.php文件中使用以下代码
$settings['trusted_host_patterns'] = array(
'^localhost$','^YOUR_IP_ADDRESS$'
);
发生这种情况是因为trusted_host_patterns
设置文件中存在变量。如果您正在本地环境上工作,并且想要覆盖此环境,请在settings.local.php
文件中定义以下部分:
/*
* Drupal Trusted Host Patterns
*/
$settings['trusted_host_patterns'] = [];
或更通用的模式:
$settings['trusted_host_patterns'] = [ '.*' ];
或更具体的本地环境:
$settings['trusted_host_patterns'] = array(
'^172\.20.\0.\3$',
'^localhost$',
);
这是最简单的解决方案,但不建议这样做,因为您应该设置适当的值,以避免出于恶意目的欺骗HTTP Host标头。如果您的网站仅在本地运行,那么您应该可以。
请参阅:可信主机名配置的新设置。