@PiZZaDoXa
Учусь WEBу

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

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

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

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

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
23 апр. 2024, в 13:19
15000 руб./за проект
23 апр. 2024, в 13:17
2000 руб./за проект