Ich benutze diesen Code, um die vollständige URL zu erhalten:
$actual_link = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
Das Problem ist, dass ich einige Masken in meiner verwende .htaccess
. Was wir also in der URL sehen, ist nicht immer der eigentliche Pfad der Datei.
Was ich brauche, ist, die URL zu erhalten, was in der URL geschrieben ist, nicht mehr und nicht weniger - die vollständige URL.
Ich muss herausfinden, wie es in der Navigationsleiste des Webbrowsers angezeigt wird, und nicht den tatsächlichen Pfad der Datei auf dem Server.
Antworten:
Schauen Sie sich an
$_SERVER['REQUEST_URI']
, dh(Beachten Sie, dass die doppelte Anführungszeichen-Syntax vollkommen korrekt ist. )
Wenn Sie sowohl HTTP als auch HTTPS unterstützen möchten, können Sie verwenden
Anmerkung des Herausgebers: Die Verwendung dieses Codes hat Auswirkungen auf die Sicherheit . Der Client kann HTTP_HOST und REQUEST_URI auf einen beliebigen Wert setzen.
quelle
'http' . (isset($_SERVER['HTTPS']) ? 's' : '') . '://' . "{$_SERVER['HTTP_HOST']}/{$_SERVER['REQUEST_URI']}"
Kurzversion zum Ausgeben eines Links auf einer Webseite
Hier finden Sie weitere Details zu den Problemen und Randfällen des Formats //example.com/path/
Vollversion
Dies ist eine stark modifizierte Version von
http://snipplr.com/view.php?codeview&id=2734
.URL-Struktur:
Schema: // Benutzername: Passwort @domain: Port / Pfad? query_string # fragment_id
Die fett gedruckten Teile werden von der Funktion nicht berücksichtigt
Anmerkungen:
username:password
vollständige URL oder das Fragment (Hash).#fragment_id
wird vom Client (Browser) nicht an den Server gesendet und nicht zur vollständigen URL hinzugefügt.$_GET
wird nurfoo=bar2
für eine URL wie enthalten/example?foo=bar1&foo=bar2
.$_SERVER['REQUEST_URI']
und zurück/example?foo=bar2
für eine URL wie die/example?foo=bar1&foo=bar2
Verwendung$_SERVER['QUERY_STRING']
in diesem Fall.URL + URN
, aber aufgrund der weit verbreiteten Verwendung bedeutet URL jetzt sowohl URI als auch URL.HTTP_X_FORWARDED_HOST
wenn Sie keine Proxys oder Balancer verwenden möchten.Host
Header die Portnummer enthalten muss, es sei denn, es ist die Standardnummer.Client (Browser) gesteuerte Variablen:
$_SERVER['REQUEST_URI']
. Nicht unterstützte Zeichen werden vom Browser codiert, bevor sie gesendet werden.$_SERVER['HTTP_HOST']
und ist nicht immer gemäß den Kommentaren im PHP-Handbuch verfügbar: http://php.net/manual/en/reserved.variables.php$_SERVER['HTTP_X_FORWARDED_HOST']
wird von Balancern gesetzt und wird in der Liste der$_SERVER
Variablen im PHP-Handbuch nicht erwähnt .Servergesteuerte Variablen:
$_SERVER['HTTPS']
. Der Client wählt dies, aber der Server gibt den tatsächlichen Wert entweder leer oder "Ein" zurück.$_SERVER['SERVER_PORT']
. Der Server akzeptiert nur zulässige Nummern als Ports.$_SERVER['SERVER_PROTOCOL']
. Der Server akzeptiert nur bestimmte Protokolle.$_SERVER['SERVER_NAME']
. Es wird manuell in der Serverkonfiguration eingestellt und ist laut IPv6 nicht verfügbar kralyk verfügbar .Verbunden:
HTTP_HOST vs. SERVER_NAME
Ist im HTTP- Headerparameter "Host" eine Portnummer erforderlich?
https://stackoverflow.com/a/28049503/175071
quelle
$_SERVER['REQUEST_URI']
wird/example?foo=bar2
für URL wie angezeigt/example?foo=bar1&foo=bar2
Host
Header übernommen, habe ihn nicht so eingestellt gesehen, danke für die Erwähnung, wird ihn als Tweak hinzufügenBeispiele für:
https://(www.)example.com/subFolder/myfile.php?var=blabla#555
Beachten ! ! !
#
Teile wurden im obigen Beispiel nur zur Veranschaulichung manuell verwendet. Serverseitige Sprachen (einschließlichphp
) können sie jedoch nicht nativ erkennen (dies kann nur Javascript, da Hashtag nurbrowser/client side
Funktionalität ist).DIRECTORY_SEPARATOR
Gibt\
für Windows-Hosting statt/
.Für WordPress
quelle
Hier ist eine Lösung, die eine ternäre Anweisung verwendet und den Code minimal hält:
Dies ist der kleinste und einfachste Weg, dies zu tun, vorausgesetzt, der Webserver verwendet den Standardport 443 für HTTPS .
quelle
$_SERVER["HTTPS"] == "on"
, um zu überprüfen, ob SSL aktiviert ist.Meine bevorzugte plattformübergreifende Methode zum Auffinden der aktuellen URL ist:
quelle
Verwenden Sie einfach:
quelle
http://example.com
:8080
/request.php
und scheitern. Diese Antworten sind aus einem bestimmten Grund kompliziert.Hinweis: Ich habe gerade den Code von Timo Huovinen aktualisiert , sodass die URL keine GET-Parameter enthält. Diese URL ist einfach und entfernt Dinge wie
?hi=i&am=a&get
.Beispiel:
wird angezeigt als:
Dies ist in Ordnung, es sei denn, Sie verwenden GET-Parameter, um einen bestimmten Inhalt zu definieren. In diesem Fall sollten Sie seinen Code verwenden! :-)
quelle
Klarer Code, der auf allen Webservern (Apache, Nginx, IIS, ...) funktioniert:
quelle
Hier ist meine Lösung - Code ist von Tracy Debugger inspiriert . Es wurde geändert, um verschiedene Server-Ports zu unterstützen. Sie können die vollständige aktuelle URL einschließlich
$_SERVER['REQUEST_URI']
oder nur der Basis-Server-URL abrufen. Überprüfen Sie meine Funktion:Hier ist Testcode:
quelle
http_build_url
erfordert pecl_http installiertVerwenden:
Wenn Sie sowohl HTTP als auch HTTPS unterstützen möchten:
quelle
Gleiche Technik wie die akzeptierte Antwort, jedoch mit HTTPS- Unterstützung und besser lesbar:
quelle
Ich habe diese Funktion erstellt, um die URL zu verarbeiten:
quelle
Verwenden Sie diesen Einzeiler, um die URL des übergeordneten Ordners zu finden (wenn Sie keinen Zugriff auf http_build_url () haben, das mit pecl_http geliefert wird):
quelle
Dies ist mit Ihren Apache-Umgebungsvariablen recht einfach. Dies funktioniert nur mit Apache 2, das Sie vermutlich verwenden.
Verwenden Sie einfach den folgenden PHP-Code:
quelle
Versuche dies:
$_SERVER
ist ein Array, das Informationen wie Header, Pfade und Skriptpositionen enthält. Die Einträge in diesem Array werden vom Webserver erstellt. Es gibt keine Garantie dafür, dass jeder Webserver diese bereitstellt. Server können einige weglassen oder andere bereitstellen, die hier nicht aufgeführt sind. Eine große Anzahl dieser Variablen ist jedoch in der »CGI / 1.1-Spezifikation enthalten, sodass Sie diese erwarten können sollten.$HTTP_SERVER_VARS
enthält die gleichen Anfangsinformationen, ist aber kein Superglobal. (Beachten Sie, dass$HTTP_SERVER_VARS
und$_SERVER
verschiedene Variablen sind und dass PHP sie als solche behandelt)quelle
Sie können http_build_url ohne Argumente verwenden, um die vollständige URL der aktuellen Seite abzurufen :
quelle
Ich habe diese Klasse für meine URIs erstellt
Natürlich müssen Sie es an Ihre Bedürfnisse und Ihr System anpassen!?!
Es muss noch perfektioniert werden, aber es ist eine gute Lösung für ein zentrales URI-System: D.
quelle
Dies ist die Lösung für Ihr Problem:
quelle
Ich habe diese Aussage benutzt.
Ich hoffe, dies wird dir helfen.
quelle
quelle
Ich habe den folgenden Code verwendet und er funktioniert für mich in beiden Fällen, HTTP und HTTPS, einwandfrei.
Demo
quelle
$_SERVER['HTTPS'] = 'off'
wird der HTTPS-Pfad ausgelöst. Das scheint nicht richtig zu sein. Andererseits glaube ich auch nicht, dass die ursprüngliche Logik richtig war.quelle
Hier ist die Grundlage für eine sicherere Version der akzeptierten Antwort unter Verwendung von PHPs filter_input- Funktion , die auch den potenziellen Mangel an Folgendem ausgleicht
$_SERVER['REQUEST_URI']
:Sie können verschiedene Filter verwenden , um sie nach Ihren Wünschen anzupassen.
quelle
Sie können
HTTP_ORIGIN
Folgendes verwenden, wie im folgenden Snippet dargestellt:quelle
Sehr einfache Verwendung:
quelle
Ich denke, diese Methode ist gut ... probieren Sie es aus
quelle
Dies funktioniert sowohl für HTTP als auch für HTTPS.
So etwas ausgeben.
quelle
Weitere Informationen: So erhalten Sie die vollständige URL einer Seite mit PHP
quelle