Ответ 1
попробуйте использовать это: $_SERVER['SERVER_NAME']
или parse
$_SERVER['REQUEST_URI']
EDIT:
У меня есть мой сайт на сервере
http://www.myserver.uk.com
Для этого у меня есть два домена:
http://one.com
и
http://two.com
Мне бы хотелось получить с текущим доменом PHP, но если я использую $_SERVER['HTTP_HOST']
, тогда это покажет мне
myserver.uk.com
вместо:
one.com or two.com
Как я могу получить домен, а не имя сервера? У меня PHP версия 5.2
попробуйте использовать это: $_SERVER['SERVER_NAME']
или parse
$_SERVER['REQUEST_URI']
EDIT:
Лучше всего использовать
echo $_SERVER['HTTP_HOST'];
И можно использовать как это
if(strpos( $_SERVER['HTTP_HOST'], 'banana.com') !== false){
echo "Yes this is indeed the banana.com domain";
}
Этот код является хорошим способом увидеть все переменные в $_SERVER в структурированном HTML-выводе с выделенными вами ключевыми словами, который останавливается сразу после выполнения. Поскольку я иногда забываю, какой из них использовать сам - я думаю, что это может быть отличным.
<?php
// change banana.com to the domain you were looking for..
$wordToHighlight= "banana.com";
$serverVarHighlighted = str_replace( $wordToHighlight, '<span style=\'background-color:#883399; color: #FFFFFF;\'>'. $wordToHighlight .'</span>', $_SERVER );
echo "<pre>";
print_r( $serverVarHighlighted );
echo "</pre>";
exit();
?>
Использование $_SERVER['HTTP_HOST']
получает меня (субдомен.) maindomain.extension. Кажется, это самое легкое решение для меня.
Изменить: если вы действительно перенаправляете через iFrame, вы можете добавить параметр get, который указывает домен.
<iframe src="myserver.uk.com?domain=one.com"/>
И тогда вы можете установить переменную сеанса, которая сохраняет эти данные во всех приложениях.
Я не знаю, как этот ответ получил сотни тысяч просмотров без единого упоминания о проблемах безопасности.
$_SERVER['HTTP_HOST']
Это получает домен из заголовков запроса, который открыт для манипуляций хакерами и может привести к отравлению кэша.
$_SERVER['SERVER_NAME']
В настройке Apache по умолчанию отключено usecanonicalname, в результате чего $_SERVER['SERVER_NAME']
с таким же заголовком $_SERVER['HTTP_HOST']
в любом случае использовал бы (плюс порт). Вот несколько вредоносных примеров. Если usecanonicalname включено, то это более безопасно, но я не знаю, работает ли этот тип конфигурации в большинстве сред.
Предостережения:
Единственный гарантированный безопасный способ - хранить доменное имя там, где у вас есть доступ.
Многие фреймворки уже позаботились о том, чтобы сделать это для вас, поэтому обратитесь к документации по вашей конкретной фреймворке. Если вы не используете фреймворк, подойдет любой из следующих методов:
+----------------------------------------------+------------------------+ | Secure Methods of Storing The Current Domain | Default/Recommended In | +----------------------------------------------+------------------------+ | Config file | Joomla, Drupal/Symfony | | Database | WordPress | | Environmental variable | Laravel | | Service registry | Kubernetes DNS | +----------------------------------------------+------------------------+
Если вы используете WordPress, вы можете безопасно получить домен следующим образом:
$urlparts = parse_url(home_url());
$domain = $urlparts['host'];
(Но если вы создаете URL в WordPress, просто используйте home_url или site_url, или любую другую функцию URL.)
Попробуйте $_SERVER['SERVER_NAME']
.
Советы. Создайте файл PHP, который вызывает функцию phpinfo()
, и просмотрите раздел "Переменные PHP". Есть куча полезных переменных, о которых мы никогда не думали.
Поздний ответ, но вот он идет:
$currentDomain = preg_replace('/www\./i', '', $_SERVER['SERVER_NAME']);
Это даст вам чистую доменную зону без www
Я знаю, что это может быть не совсем по этому вопросу, но, по моему опыту, я нахожу сохранение WWW-кода текущего URL-адреса в полезной переменной.
Изменить: Кроме того, пожалуйста, ознакомьтесь с моим комментарием ниже, чтобы узнать, что это значит.
Это важно при определении того, следует ли отправлять вызовы Ajax с помощью "www" или без:
$.ajax("url" : "www.site.com/script.php", ...
$.ajax("url" : "site.com/script.php", ...
При отправке вызова Ajax имя домена должно совпадать с именем в адресной строке браузера, в противном случае в консоли будет Uncaught SecurityError.
Итак, я придумал это решение, чтобы решить проблему:
<?php
substr($_SERVER['SERVER_NAME'], 0, 3) == "www" ? $WWW = true : $WWW = false;
if ($WWW) {
/* We have www.example.com */
} else {
/* We have example.com */
}
?>
Затем, в зависимости от того, является ли $WWW истинным или false, выполните правильный вызов Ajax.
Я знаю, что это может показаться тривиальным, но это такая распространенная проблема, которую легко преодолеть.
Извините за поздний ответ, все используют функцию parse_url
но иногда пользователь может передать аргумент в другом формате.
чтобы исправить, что я создал finction проверить это
function fixDomainName($url='')
{
$strToLower = strtolower(trim($url));
$httpPregReplace = preg_replace('/^http:\/\//i', '', $strToLower);
$httpsPregReplace = preg_replace('/^https:\/\//i', '', $httpPregReplace);
$wwwPregReplace = preg_replace('/^www\./i', '', $httpsPregReplace);
$explodeToArray = explode('/', $wwwPregReplace);
$finalDomainName = trim($explodeToArray[0]);
return $finalDomainName;
}
просто передайте URL и получите домен например
echo fixDomainName('https://stackoverflow.com');
вернет результат будет
stackoverflow.com
и в какой-то ситуации
echo fixDomainName('stackoverflow.com/questions/id/slug');
и он также вернет stackoverflow.com
Надеюсь, поможет
Просто попробуйте:
echo apache_request_headers()[3];