2016-09-12 11 views
1

Я пытаюсь создать языковой коммутатор для моего сайта, но поскольку хостинг должен быть 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 = де

+0

Есть ли что-нибудь, возвращаемое getFullURL() или только усеченный URL? –

+0

Он возвращает только домен.com, не более того. Это расстраивает – Aptivus

+0

Вы видели этот ответ http://stackoverflow.com/questions/189113/how-can-i-get-the-current-pages-full-url-on-a-windows-iis-server? Главный ответ заключается в использовании '$ _SERVER ['PATH_INFO']' в IIS, который, как представляется, не используется. Попробуйте это в вашей функции getFullUrl. –

ответ

0

Эта строка возвращает пустой

$url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; 

, потому что она должна быть это:

$url = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; 

Вы должны котировки для ключей .... см here в руководстве.

+0

Ну, на Linux это можно написать так, как я. Кстати, ваше предложение решило часть проблемы. Теперь кажется, что если я нахожусь в URL без строки запроса, он отлично работает. С другой стороны, если строка запроса уже существует, то она не работает. Он просто показывает старую строку запроса – Aptivus

 Смежные вопросы

  • Нет связанных вопросов^_^