Можно ли определить, является ли www. был введен как часть URL-адреса в адресную строку исключительно из PHP?

Доступ к сайту без "www." аналог в браузере,

как и "site.com", по-прежнему будет отображать "www.site.com" от $_SERVER['SERVER_NAME'];

Может показаться, что это не имеет большого значения, просто определите это во внешнем интерфейсе при выполнении вызовов ajax, используя что-то вроде location.href, верно?

Или просто удалите «www». с SERVER_NAME. Хорошее решение, но не решает основную проблему. Теперь PHP-код должен полагаться на JavaScript? Разве серверная часть не должна определять адреса yes-www и no-www?

Кроме того, если у вас есть ‹form action = "URL">, не говоря уже о PHP, который генерирует код, который должен выполнять вызовы на сервер, решение, использующее $_SERVER['SERVER_NAME'], создаст кросс- ошибки безопасности домена.

Итак -- вопрос в том -- есть ли в PHP способ автоматически определять, является ли www. часть была или не была введена в адресную строку браузера как часть доменного имени?

Проблема в том, что теперь PHP-код на стороне сервера зависит от JavaScript, который иногда может быть отключен в браузере. И вообще это звучит как неуклюжая практика.


person InfiniteStack    schedule 23.08.2016    source источник
comment
Ваш веб-сервер, вероятно, должен переводить запросы без www. в запросы с www. (или наоборот), поэтому с этой точки зрения все должно обслуживаться в одном домене.   -  person Matthew Herbst    schedule 23.08.2016
comment
Принудительная перезапись с не-www на www. заставят пользователей сказать: «Но http://example.com — самый современный способ!»   -  person InfiniteStack    schedule 23.08.2016
comment
Так перепиши по другому. И для протокола: google.com отправляет вас к www.google.com. Я с радостью сделаю все, что делает Google.   -  person Matthew Herbst    schedule 23.08.2016
comment
предложите использовать правило перезаписи для принудительного применения с WWW или без него. ~ редактировать, не могу помещать фрагменты кода в комментарии .. проверьте мой ответ   -  person Duane Lortie    schedule 23.08.2016


Ответы (2)


Да это вполне возможно.

<?php 
    //Will be true if www. exists, and false if not. 

    $host_has_www = (strpos($_SERVER['HTTP_HOST'], 'www.') !== false) ? true : false;

    if ($host_has_www == true) { 
      //Do something
    }

?>
person Mike    schedule 23.08.2016
comment
Это также даст true, если имя хоста будет просто включать 'www.', например. subdomain.www.anothersubdomain.site.com. Вы должны проверить позицию как strpos(...) === 0, или, как я предпочитаю, substr($host,0,4) === 'www.' - person Dan Soap; 23.08.2016
comment
Это правда, я на самом деле ошибся, задав вопрос: / HTTP_HOST точно отражает адрес www. часть в каждом случае. Я случайно просматривал кэшированную страницу, которая была кэширована с домена www-present. - person InfiniteStack; 23.08.2016

Чтобы заставить www редактировать .htaccess

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

тогда каждый запрос всегда будет иметь www или использовать аналогичный метод для удаления www

person Duane Lortie    schedule 23.08.2016