Używam tego kodu, aby uzyskać pełny adres URL:
$actual_link = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
Problem polega na tym, że używam niektórych masek .htaccess
, więc to, co widzimy w adresie URL, nie zawsze jest prawdziwą ścieżką do pliku.
Potrzebuję uzyskać adres URL, co jest zapisane w adresie URL, nic więcej i nic innego - pełny adres URL.
Muszę dowiedzieć się, jak to wygląda na pasku nawigacji w przeglądarce internetowej, a nie rzeczywista ścieżka do pliku na serwerze.
Odpowiedzi:
Spójrz na
$_SERVER['REQUEST_URI']
, tj(Zauważ, że składnia podwójnego cudzysłowu jest całkowicie poprawna )
Jeśli chcesz obsługiwać zarówno HTTP, jak i HTTPS, możesz użyć
Uwaga edytora: użycie tego kodu ma wpływ na bezpieczeństwo . Klient może ustawić HTTP_HOST i REQUEST_URI na dowolną wybraną przez siebie wartość.
źródło
'http' . (isset($_SERVER['HTTPS']) ? 's' : '') . '://' . "{$_SERVER['HTTP_HOST']}/{$_SERVER['REQUEST_URI']}"
Krótka wersja do wyświetlania linku na stronie internetowej
Oto kilka szczegółowych informacji o problemach i przypadkowych przypadkach formatu //example.com/path/
Pełna wersja
To jest mocno zmodyfikowana wersja
http://snipplr.com/view.php?codeview&id=2734
.Struktura URL:
schemat: // użytkownik: hasło @DOMAIN: port / ścieżka query_string # fragment_id
Części pogrubione nie zostaną uwzględnione przez funkcję
Uwagi:
username:password
pełnego adresu URL ani fragmentu (skrótu).#fragment_id
jest wysyłany do serwera przez klienta (przeglądarkę) i nie zostanie dodany do pełnego adresu URL.$_GET
będzie zawierać tylkofoo=bar2
adres URL podobny do/example?foo=bar1&foo=bar2
.$_SERVER['REQUEST_URI']
i zwracają/example?foo=bar2
adres URL typu: w tym przypadku/example?foo=bar1&foo=bar2
użyj$_SERVER['QUERY_STRING']
.URL + URN
, ale z powodu popularnego zastosowania adres URL oznacza teraz zarówno identyfikator URI, jak i adres URL.HTTP_X_FORWARDED_HOST
jeśli nie planujesz używać serwerów proxy lub równoważników.Host
nagłówek musi zawierać numer portu, chyba że jest to liczba domyślna.Zmienne kontrolowane przez klienta (przeglądarkę):
$_SERVER['REQUEST_URI']
. Wszelkie nieobsługiwane znaki są kodowane przez przeglądarkę przed wysłaniem.$_SERVER['HTTP_HOST']
i nie zawsze jest dostępny zgodnie z komentarzami w podręczniku PHP: http://php.net/manual/en/reserved.variables.php$_SERVER['HTTP_X_FORWARDED_HOST']
jest ustawiany przez równoważniki i nie jest wymieniony na liście$_SERVER
zmiennych w podręczniku PHP.Zmienne kontrolowane przez serwer:
$_SERVER['HTTPS']
. Klient decyduje się na to, ale serwer zwraca rzeczywistą wartość pustej lub „włączonej”.$_SERVER['SERVER_PORT']
. Serwer akceptuje tylko dozwolone numery jako porty.$_SERVER['SERVER_PROTOCOL']
. Serwer akceptuje tylko niektóre protokoły.$_SERVER['SERVER_NAME']
. Jest ustawiany ręcznie w konfiguracji serwera i nie jest dostępny dla IPv6 według kralyk .Związane z:
HTTP_HOST vs. SERVER_NAME
Czy numer portu jest wymagany w parametrze nagłówka HTTP „Host”?
https://stackoverflow.com/a/28049503/175071
źródło
$_SERVER['REQUEST_URI']
pokaże/example?foo=bar2
dla adresu URL jak/example?foo=bar1&foo=bar2
Host
nagłówka, nie widziałem takiego ustawienia, dziękuję, że o tym wspomniałeś, doda go jako poprawkęPrzykłady dla:
https://(www.)example.com/subFolder/myfile.php?var=blabla#555
Ogłoszenie ! ! !
#
części hashtag zostały użyte ręcznie w powyższym przykładzie wyłącznie w celach ilustracyjnych, jednak języki po stronie serwera (w tymphp
) nie mogą ich natywnie wykryć (tylko JavaScript może to zrobić, ponieważ hashtag to tylkobrowser/client side
funkcjonalność).DIRECTORY_SEPARATOR
zwraca\
dla hostingu typu Windows zamiast/
.Dla WordPress
źródło
Oto rozwiązanie wykorzystujące instrukcję potrójną , utrzymującą minimalny kod:
Jest to najmniejszy i najłatwiejszy sposób, aby to zrobić, zakładając, że serwer WWW używa standardowego portu 443 dla HTTPS .
źródło
$_SERVER["HTTPS"] == "on"
aby sprawdzić, czy protokół SSL jest włączony.Moja ulubiona metoda znajdowania bieżącego adresu URL na wielu platformach to:
źródło
Po prostu użyj:
źródło
http://example.com
:8080
/request.php
i zawieść. Te odpowiedzi są skomplikowane z jakiegoś powodu.Uwaga: Właśnie zaktualizowałem kod Timo Huovinen , więc nie dostaniesz żadnych parametrów GET w adresie URL. Ten adres URL jest prosty i usuwa takie rzeczy
?hi=i&am=a&get
.Przykład:
będzie pokazany jako:
Jest to w porządku, chyba że użyjesz parametrów GET do zdefiniowania określonej zawartości, w takim przypadku powinieneś użyć jego kodu! :-)
źródło
Wyczyść kod, działający na wszystkich serwerach WWW (Apache, nginx, IIS, ...):
źródło
Oto moje rozwiązanie - kod jest inspirowany Tracy Debugger . Zostało zmienione, aby obsługiwać różne porty serwera. Możesz uzyskać pełny bieżący adres URL, w tym
$_SERVER['REQUEST_URI']
podstawowy adres URL serwera. Sprawdź moją funkcję:Oto kod testowy:
źródło
http_build_url
wymaga zainstalowanego pecl_httpPosługiwać się:
Jeśli chcesz obsługiwać zarówno HTTP, jak i HTTPS:
źródło
Ta sama technika co zaakceptowana odpowiedź, ale z obsługą HTTPS i bardziej czytelna:
źródło
Zrobiłem tę funkcję do obsługi adresu URL:
źródło
Użyj tego jednowierszowego, aby znaleźć adres URL folderu nadrzędnego (jeśli nie masz dostępu do http_build_url (), który jest dostarczany z pecl_http):
źródło
Jest to dość łatwe w przypadku zmiennych środowiskowych Apache. Działa to tylko z Apache 2, który, jak zakładam, używasz.
Po prostu użyj następującego kodu PHP:
źródło
Spróbuj tego:
$_SERVER
to tablica zawierająca informacje, takie jak nagłówki, ścieżki i lokalizacje skryptów. Wpisy w tej tablicy są tworzone przez serwer WWW. Nie ma gwarancji, że każdy serwer sieciowy zapewni którykolwiek z nich; serwery mogą pomijać niektóre lub udostępniać inne nie wymienione tutaj. To powiedziawszy, duża liczba tych zmiennych jest uwzględniona w specyfikacji »CGI / 1.1, więc powinieneś się ich spodziewać.$HTTP_SERVER_VARS
zawiera te same informacje początkowe, ale nie jest superglobalny. (Zauważ, że$HTTP_SERVER_VARS
i$_SERVER
są to różne zmienne oraz że PHP obsługuje je jako takie)źródło
Możesz użyć http_build_url bez argumentów, aby uzyskać pełny adres URL bieżącej strony:
źródło
Zrobiłem tę klasę do obsługi mojego identyfikatora URI
Oczywiście musisz dostosować go do swoich potrzeb i systemu!?!
Nadal trzeba go udoskonalić, ale jest to dobre rozwiązanie dla scentralizowanego systemu URI: D
źródło
Oto rozwiązanie twojego problemu:
źródło
Użyłem tego oświadczenia.
Mam nadzieję, że to Ci pomoże.
źródło
źródło
Użyłem poniższego kodu i działa on dla mnie dobrze, w obu przypadkach, HTTP i HTTPS.
Próbny
źródło
$_SERVER['HTTPS'] = 'off'
uruchomi ścieżkę HTTPS. To nie wydaje się właściwe. Z drugiej strony nie wydaje mi się, żeby oryginalna logika była właściwa.źródło
Oto podstawa bezpieczniejszej wersji akceptowanej odpowiedzi, wykorzystującej funkcję PHP filter_input , która również eliminuje potencjalny brak
$_SERVER['REQUEST_URI']
:Możesz użyć różnych filtrów, aby dostosować go do swoich potrzeb.
źródło
Możesz użyć,
HTTP_ORIGIN
jak pokazano na poniższym fragmencie:źródło
Bardzo proste użycie:
źródło
Myślę, że ta metoda jest dobra ... spróbuj
źródło
Działa to zarówno dla HTTP, jak i HTTPS.
Wyprowadzić coś takiego.
źródło
Więcej informacji: jak uzyskać pełny adres URL strony za pomocą PHP
źródło