@PiZZaDoXa
Учусь WEBу

Как на php сверить заданный параметр с именем домена?

Хочу реализовать проверку посредствам PHP :
<?php
if ( 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'] == "https://site.ru/" ){
	echo 'Мой' ;
} else {
	 echo 'Другой';
	}
?>

Результат получаю всегда - Другой.
+ вопрос сюда же, как мне например при ответе - мой,подключать например скрипты метрики ?
Всё это хочу сделать в шаблоне joomla
  • Вопрос задан
  • 519 просмотров
Решения вопроса 1
@granty
Михаил Миргородский,
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

Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Странно было бы получить другой результат:
'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'] == "https://site.ru/"
Ответ написан
@RuComMarket
Битрикс FullStack разработчик
может так:
if ($_SERVER['REQUEST_SCHEME'].'://.'$_SERVER['SERVER_NAME'].'/' == "https://site.ru/" ){
  echo 'Мой' ;
} else {
   echo 'Другой';
  }

но вообще если к сайту обратились, то имя по-любому будет твое, не вижу смысла реализации такого условия
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы