it-swarm.com.de

Aktuelle Domain abrufen

Ich habe meine Site auf dem Server 

http://www.myserver.uk.com

Dafür habe ich zwei Domänen:

http://one.com

und 

http://two.com

ich würde gerne mit PHP aktuelle Domain bekommen, aber wenn ich $_SERVER['HTTP_Host'] verwende, dann zeige ich das 

myserver.uk.com

anstatt:

one.com or two.com

Wie bekomme ich die Domäne und nicht den Servernamen? Ich habe PHP Version 5.2

108
Tony Evyght

versuchen Sie es mit diesem: $_SERVER['SERVER_NAME']

oder analysieren 

$_SERVER['REQUEST_URI']

EDIT:

Apache_request_headers ()

147
onehalf

Der beste Nutzen wäre 

echo $_SERVER['HTTP_Host'];

Und kann so verwendet werden

if(strpos( $_SERVER['HTTP_Host'], 'banana.com') !== false){
    echo "Yes this is indeed the banana.com domain";
}

Mit dem folgenden Code können Sie alle Variablen in $ _SERVER in einer strukturierten HTML-Ausgabe anzeigen, wobei Ihre Schlüsselwörter hervorgehoben sind und direkt nach der Ausführung angehalten werden. Da ich manchmal vergesse, welche ich mich selbst gebrauchen sollte, denke ich, dass das geschickt sein kann. 

<?php 
// change banana.com to the domain you were looking for.. 
$wordToHighlight= "banana.com";
$serverVarHighlighted = str_replace( $wordToHighlight, '<span style=\'background-color:#883399; color: #FFFFFF;\'>'. $wordToHighlight .'</span>',  $_SERVER );
echo "<pre>";
print_r( $serverVarHighlighted );
echo "</pre>";
exit();
?>
46

Mit $_SERVER['HTTP_Host'] erhält man (subdomain.) Maindomain.extension. Scheint für mich die einfachste Lösung zu sein.

Bearbeiten: Wenn Sie tatsächlich über einen iFrame "umleiten", können Sie einen get-Parameter hinzufügen, der die Domäne angibt.

<iframe src="myserver.uk.com?domain=one.com"/>

Dann könnten Sie eine Sitzungsvariable festlegen, die diese Daten in Ihrer gesamten Anwendung beibehält.

39
Raz0rwire

Ich weiß nicht, wie diese Antwort Hunderttausende von Ansichten erhalten hat, ohne die Sicherheitsprobleme zu erwähnen.

Der falsche Weg:

$_SERVER['HTTP_Host']

Dadurch wird die Domäne aus den Anforderungsheadern abgerufen, die offen sind für Manipulationen durch Hacker und die zu Cache-Vergiftungen führen können.

$_SERVER['SERVER_NAME']

Die Standardeinstellung von Apache hat usecanonicalname deaktiviert, wodurch $_SERVER['SERVER_NAME'] mit demselben Header $_SERVER['HTTP_Host'] (und dem Port) verwendet wird. Hier sind einige schädliche Beispiele . Wenn "usecanonicalname" aktiviert ist, ist es sicherer, aber ich weiß nicht, ob diese Art von Konfiguration in den meisten Umgebungen funktioniert.

Vorsichtsmaßnahmen:

  • Wenn der Servername nicht aufgelöst werden kann, wird der Befehl Hostname des Betriebssystems anstelle von [source] verwendet.
  • Redhat aktiviert usecanonical standardmäßig [ source ].
  • Wenn der Hostheader ausgelassen wird, verhält sich der Server so, als wäre usecanonical Auf [source] .

Der richtige Weg:

Die einzige garantierte sichere Methode ist das Speichern der Domäne an einem Ort, auf den Sie zugreifen können.

Viele Frameworks erledigen dies bereits für Sie. Konsultieren Sie daher die Dokumentation Ihres jeweiligen Frameworks. Wenn Sie kein Framework verwenden, funktioniert eine der folgenden Methoden:

 + ------------------------------------------ + ------------------------ + 
 | Sichere Methoden zum Speichern der aktuellen Domäne | Standard/empfohlen in | 
 + ------------------------------------- ----- + ------------------------ + 
 | Konfigurationsdatei | Joomla, Drupal/Symfony | 
 | Datenbank | WordPress | 
 | Umgebungsvariable | Laravel | 
 | Dienstregister | Kubernetes DNS | 
 + --------------------------------------- --- + ------------------------ + 

Für WordPress-Benutzer:

Wenn Sie WordPress verwenden, können Sie die Domäne wie folgt sicher abrufen:

$urlparts = parse_url(home_url());
$domain = $urlparts['Host'];

(Wenn Sie jedoch eine URL in WordPress erstellen, verwenden Sie einfach home_url oder site_url oder eine der anderen URL-Funktionen .)


7
Mr. Me

Versuchen Sie $_SERVER['SERVER_NAME']. Tipps: Erstellen Sie eine Datei PHP, die die Funktion phpinfo() aufruft, und lesen Sie den Abschnitt "PHP-Variablen". Es gibt eine Reihe nützlicher Variablen, an die wir nie gedacht hätten.

6
flowfree

Späte Antwort, aber hier geht es:

$currentDomain = preg_replace('/www\./i', '', $_SERVER['SERVER_NAME']);

Sie erhalten einen sauberen Domainnamen ohne www

4
Pedro Lobito

Ich weiß, dass dies möglicherweise nicht vollständig zum Thema gehört, aber nach meiner Erfahrung finde ich das Speichern von WWW-Werten der aktuellen URL in einer Variablen nützlich.

Edit: Siehe auch meinen Kommentar unten, um zu sehen, worauf es ankommt.

Dies ist wichtig, wenn Sie festlegen möchten, ob Ajax-Anrufe mit "www" oder ohne ausgelöst werden sollen:

$.ajax("url" : "www.site.com/script.php", ...

$.ajax("url" : "site.com/script.php", ...

Wenn Sie einen Ajax-Anruf absenden, muss der Domänenname mit dem in der Adressleiste des Browsers übereinstimmen. Andernfalls wird Unecught SecurityError in der Konsole angezeigt.

Also kam ich zu dieser Lösung, um das Problem anzugehen:

<?php
    substr($_SERVER['SERVER_NAME'], 0, 3) == "www" ? $WWW = true : $WWW = false;

    if ($WWW) {
        /* We have www.example.com */
    } else {
        /* We have example.com */
    }
?>

Dann, je nachdem, ob $ WWW wahr ist, oder falsch den richtigen Ajax-Aufruf ausführen.

Ich weiß, das klingt vielleicht trivial, aber dies ist ein so häufiges Problem, das leicht zu übersehen ist. 

3
InfiniteStack

sorry Für die späte Antwort verwendet jeder die parse_url-Funktion, aber manchmal kann der Benutzer das argumet in einem anderen Format übergeben

um das zu beheben, habe ich die Funktion erstellt

function fixDomainName($url='')
    {
        $strToLower = strtolower(trim($url));
        $httpPregReplace = preg_replace('/^http:\/\//i', '', $strToLower);
        $httpsPregReplace = preg_replace('/^https:\/\//i', '', $httpPregReplace);
        $wwwPregReplace = preg_replace('/^www\./i', '', $httpsPregReplace);
        $explodeToArray = explode('/', $wwwPregReplace);
        $finalDomainName = trim($explodeToArray[0]);
        return $finalDomainName;
    }

Übergeben Sie einfach die URL und erhalten Sie die Domäne Zum Beispiel 

echo fixDomainName('https://stackoverflow.com');

zurückgeben wird das Ergebnis sein

stackoverflow.com

und in manchen Situationen 

echo fixDomainName('stackoverflow.com/questions/id/slug');

und es wird auch stackoverflow.com

Ich hoffe es hilft

0
Manojkiran.A
$_SERVER['HTTP_Host'] 

// um die Domain zu bekommen

$protocol=strpos(strtolower($_SERVER['SERVER_PROTOCOL']),'https') === FALSE ? 'http' : 'https';
$domainLink=$protocol.'://'.$_SERVER['HTTP_Host'];

// Domain mit Protokoll

$url=$protocol.'://'.$_SERVER['HTTP_Host'].'?'.$_SERVER['QUERY_STRING'];

// Protokoll, Domain, QueryString gesamt ** Da der $ _SERVER ['SERVER_NAME'] für Multi-Domain-Hosting nicht zuverlässig ist!

0
Sarkar