Я пытаюсь создать языковой коммутатор для моего сайта, но поскольку хостинг должен быть Windows IIS с PHP, я не могу получить полный URL-адрес страницы, просматриваемой посетителем.Получение полного URL-адреса с PHP в Windows не работает
Скажите, что я нахожусь на domain.com/page.php?id=23, что я получаю, используя старомодный
$url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
пустая строка.
Так что я попробовал найденное решение здесь, на StackOverflow, чтобы получить полный адрес
function getFullUrl() {
$pageURL = 'http';
if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER['HTTP_X_REWRITE_URL'];
} else {
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER['HTTP_X_REWRITE_URL'];//$_SERVER["REQUEST_URI"] blank
}
return $pageURL;
}
, но все еще ничего. Я получаю что-то вроде: domain.com/page.php? в некоторых случаях и doman.com/? в других.
Есть ли окончательный способ получить полный URL-адрес в этом сценарии?
спасибо.
EDIT Похоже, что на этом сервере ничего не может быть сделано. Я решил с помощью клиентской стороне работы вокруг написано в JS + JQuery (я использовал плагин изнаночной) .... ужасно :) Вот оно:
$('.lang').each(function(){
$(this).click(function(e){
e.preventDefault();
var lingua = $(this).find('a').data('lang');
var url = window.location.href;
var urlParts = purl(url);
if (url.indexOf("?") >= 0)
{
var queryString = urlParts.attr('query').split('&');
var langIndex = queryString.indexOf('lang');
if(langIndex > -1)
{
queryString.splice(langIndex,1);
var newUrl = urlParts.attr('protocol')+urlParts.attr('host')+urlParts.attr('path')
window.location = newUrl + '&lang='+lingua;
}
else window.location = url + '&lang='+lingua;
}
else
window.location = url + '?lang='+lingua;
});
});
Это похоже на работу, даже если я не понимаю, почему если «lang» уже находится в qeurystring, скрипт не распознает его и продолжает добавлять & lang каждый раз, когда я нажимаю на ссылки. Конечно, это работает так или иначе, но это ужасно смотреть URL, как & LANG = EN & LANG = фр & LANG = пл & LANG = де
Есть ли что-нибудь, возвращаемое getFullURL() или только усеченный URL? –
Он возвращает только домен.com, не более того. Это расстраивает – Aptivus
Вы видели этот ответ http://stackoverflow.com/questions/189113/how-can-i-get-the-current-pages-full-url-on-a-windows-iis-server? Главный ответ заключается в использовании '$ _SERVER ['PATH_INFO']' в IIS, который, как представляется, не используется. Попробуйте это в вашей функции getFullUrl. –