Михаил Миргородский,
1. Вы сравниваете
'http://' с
'https://' - строки явно не совпадут. Зачем вы добавляете схему, вам же надо только проверить доменное имя?
2. $_SERVER['REQUEST_URI']
содержит запрошенный путь на сайте и имя файла:
/ // запрос морды сайта
/config.php // запрос скрипта на сайте
/upload/get.php // запрос скрипта из папки
Зачем вы их добавляете в проверку? Они ни как не влияют на проверку доменного имени.
3. запрос к вашему сайту по HTTP/1.1:
GET /path/page.php HTTP/1.1 // относительный URL
Host: domain.ru
или:
GET http://domain.ru/path/page.php HTTP/1.1 // абсолютный URL с доменом
Host: любой_текст_тут
$_SERVER['HTTP_HOST']
всегда будет содержать значение из поля
Host:. А там можно прислать что угодно, если в GET передаётся
абсолютный URL с доменом.
Спецификация требует игнорировать заголовок
Host:, если в GET содержится абсолютный url - вы уверены, что ваш веб-сервер делает это?
$_SERVER['HTTP_HOST']
присылается пользователем, доверять ему нельзя. Там может быть и IP-адрес сайта - вполне легальный запрос при определённых настройках веб-сервера.
4. $_SERVER['SERVER_NAME']
устанавливается веб сервером и содержит имя домена из конфигурации вашего веб-сервера. Ему можно доверять, но есть и грабли. Вот кусок конфига Apache:
ServerName domain.com # основной домен
ServerAlias www.domain.com # домен с www
ServerAlias m.domain.com # мобильная версия сайта
И, какое из этих 3-х имён пропадёт в
$_SERVER['SERVER_NAME']
?
Если в конфиге установлено
UseCanonicalName On
- в
$_SERVER['SERVER_NAME']
всегда будет имя из
ServerName конфига веб сервера.
Если нет - будет одно из этих 3-х имён - то, по которому была запрошена страница сайта:
http://www.domain.com/index.php ->
www.domain.com
https://m.domain.com/images/upload.php ->
m.domain.com
ws://domain.com/ajax/get.php ->
domain.com