975 Stimmen

Abrufen der vollständigen URL in PHP

Ich verwende 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 meinem .htaccess Daher ist der in der URL angegebene Pfad nicht immer der tatsächliche Pfad der Datei.

Was ich brauche, ist die URL, das, was in der URL steht, nicht mehr und nicht weniger - die vollständige URL.

Ich muss wissen, wie die Datei in der Navigationsleiste des Webbrowsers angezeigt wird, und nicht den tatsächlichen Pfad der Datei auf dem Server.

0 Stimmen

Schauen Sie sich doch einfach mal das gesamte Array mit print_r($_SERVER) Dort finden Sie alles, was Sie brauchen :)

24 Stimmen

@Brade Die URL-Leiste befindet sich auf dem Browser des Benutzers, warum sollte PHP also irgendwelche Funktionalitäten diesbezüglich haben? PHP ist serverseitig.

33 Stimmen

@eis Glauben Sie mir, es gibt viele Gründe, dies zu wollen. Landingpages, die dieselbe Vorlage verwenden, aber separat verfolgt werden müssen, usw. Und Tatsache ist, dass PHP (oder jede andere serverseitige Sprache) alle verschiedenen Teile der URL zurückgeben kann, aber niemals das Ganze in einem String bereitstellen kann. Das erscheint einfach dumm.

38voto

HappyCoder Punkte 5605

Einfach verwenden:

$uri = $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']

24voto

Alex Westergaard Punkte 285
function full_path()
{
    $s = &$_SERVER;
    $ssl = (!empty($s['HTTPS']) && $s['HTTPS'] == 'on') ? true:false;
    $sp = strtolower($s['SERVER_PROTOCOL']);
    $protocol = substr($sp, 0, strpos($sp, '/')) . (($ssl) ? 's' : '');
    $port = $s['SERVER_PORT'];
    $port = ((!$ssl && $port=='80') || ($ssl && $port=='443')) ? '' : ':'.$port;
    $host = isset($s['HTTP_X_FORWARDED_HOST']) ? $s['HTTP_X_FORWARDED_HOST'] : (isset($s['HTTP_HOST']) ? $s['HTTP_HOST'] : null);
    $host = isset($host) ? $host : $s['SERVER_NAME'] . $port;
    $uri = $protocol . '://' . $host . $s['REQUEST_URI'];
    $segments = explode('?', $uri, 2);
    $url = $segments[0];
    return $url;
}

Hinweis: Ich habe soeben eine Aktualisierung der Der Code von Timo Huovinen so dass Sie keine GET-Parameter in der URL erhalten. Diese URL ist einfach und entfernt Dinge wie ?hi=i&am=a&get .

Beispiel:

http://www.example.com/index?get=information

wird als angezeigt:

http://www.example.com/index

Das ist in Ordnung, es sei denn, Sie verwenden GET-Parameter, um einen bestimmten Inhalt zu definieren. In diesem Fall sollten Sie seinen Code verwenden! :-)

20voto

Jonathon Hill Punkte 3254

Dieselbe Technik wie bei der akzeptierten Antwort, aber mit HTTPS Unterstützung und bessere Lesbarkeit:

$current_url = sprintf(
    '%s://%s/%s',
    isset($_SERVER['HTTPS']) ? 'https' : 'http',
    $_SERVER['HTTP_HOST'],
    $_SERVER['REQUEST_URI']
);

Die obigen Angaben ergeben unerwünschte Schrägstriche. Bei meiner Einrichtung Anfrage_URI hat führende und nachfolgende Schrägstriche. Das funktioniert für mich besser.

$Current_Url = sprintf(
   '%s://%s/%s',
   isset($_SERVER['HTTPS']) ? 'https' : 'http',
   $_SERVER['HTTP_HOST'],
   trim($_SERVER['REQUEST_URI'],'/\\')
);

19voto

Andreas Punkte 2701

Klarer Code, der auf allen Webservern funktioniert (Apache, nginx, IIS, ...):

$url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];

17voto

Avatar Punkte 12579

HTTP_HOST und REQUEST_URI müssen in Anführungszeichen stehen, sonst gibt es einen Fehler in PHP 7.2

Verwendung:

$actual_link = 'https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

Wenn Sie sowohl HTTP als auch HTTPS unterstützen möchten:

$actual_link = (isset($_SERVER['HTTPS']) ? 'https' : 'http').'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X