Я работаю на веб-сайте Drupal 8, и когда я захожу на любую страницу, я получаю простую белую страницу со следующим сообщением об ошибке.
Указанное имя хоста недопустимо для этого сервера.
Что это значит? Как я могу это исправить?
Я работаю на веб-сайте Drupal 8, и когда я захожу на любую страницу, я получаю простую белую страницу со следующим сообщением об ошибке.
Указанное имя хоста недопустимо для этого сервера.
Что это значит? Как я могу это исправить?
Ответы:
Это сообщение об ошибке исходит от функции, которая была добавлена в Drupal 8 для защиты от атак заголовка HTTP-хоста . Эта функция также описана в записи изменений , созданной для исправления.
По сути, было возможно подделать заголовок 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 для злонамеренных целей. Если ваш сайт работает только на вашем локальном компьютере, то все будет в порядке.
См .: Новые настройки для конфигурации доверенного имени хоста .
Эта проблема также возникнет, если у вас есть
<VirtualHost *:443>
когда вы должны иметь
<VirtualHost *:80>
установить в настройках не-ssl (например, для сред разработки / тестирования) и попытаться получить доступ к сайту через порт 80
Это связано с конфигурацией доверенного хоста сервера. Это может выдать, когда вы меняете доменное имя или 'trusted_host_patterns'
. Для решения problème, добавить новый домен к DRUPAL_ROOT/sites/SITE_FOLDER/settings.php
(Ex: sites/defaults/settings.php
)
Пример: доменное имя = newdomain.com
$settings['trusted_host_patterns'] = array(
'^newdomain.com\.loc$',
'^www\.newdomain.com\.loc$',
);