Frage

Ich möchte alle www.domain.com -Anfragen mit Domain.com mit PHP umleiten: Grundsätzlich:

if (substr($_SERVER['SERVER_NAME'], 0, 4) === 'www.')
{
    header('Location: http://' . substr($_SERVER['SERVER_NAME'], 4)); exit();
}

Ich möchte jedoch die angeforderte URL wie in SO, für z. B. beibehalten:

http://www.stackoverflow.com/questions/tagged/php?foo=bar

Sollte umleiten zu:

http://stackoverflow.com/questions/tagged/php?foo=bar

Ich möchte mich nicht verlassen .htaccess Lösungen, und ich bin mir nicht sicher, welche $_SERVER Vars müsste dies verwenden, um dies zu erreichen. Außerdem wäre die Erhaltung des HTTPS -Protokolls ein Plus.

Wie soll ich das machen?

War es hilfreich?

Lösung

$pageURL = (@$_SERVER["HTTPS"] == "on") ? "https://" : "http://";
if ($_SERVER["SERVER_PORT"] != "80")
{
    $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
} 
else 
{
    $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
}
header('Location: '. $pageURL);

Würde den Benutzer auf genau die gleiche Seite www umleiten. intakt.

Also, um das www loszuwerden. Wir ersetzen nur eine Zeile:

$pageURL = (@$_SERVER["HTTPS"] == "on") ? "https://" : "http://";
if ($_SERVER["SERVER_PORT"] != "80")
{
    $pageURL .= substr($_SERVER['SERVER_NAME'], 4).":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
} 
else 
{
    $pageURL .= substr($_SERVER['SERVER_NAME'], 4).$_SERVER["REQUEST_URI"];
}
return $pageURL;

Und das sollte funktionieren.

Übrigens ist dies die Methode, die von Google empfohlen wird, da sie aufbewahrt wird https:// Intakt, zusammen mit Ports und sogleichen, wenn Sie sie verwenden.


Wie Gumbo betonte, benutzt er $_SERVER['HTTP_HOST'] Da kommt es von den Headern anstelle des Servers, also $_SERVER['SERVER_*'] ist nicht so zuverlässig. Sie könnten einige ersetzen$_SERVER['SERVER_NAME'] mit $_SERVER['HTTP_HOST'], und es sollte genauso funktionieren.

Andere Tipps

Versuche dies:

if (substr($_SERVER['HTTP_HOST'], 0, 4) === 'www.') {
    header('Location: http'.(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on' ? 's':'').'://' . substr($_SERVER['HTTP_HOST'], 4).$_SERVER['REQUEST_URI']);
    exit;
}

if (isset ($ _ server ['https']) &&!
$ https = 1;
} anders {
$ https = 0;
}
if (substr ($ _ server ['http_host'], 0, 4)! == 'www.') {
Redirect (($ https? 'https: //': 'http: //') .'Www. '. $ _server [' http_host ']. $ _ Server [' Request_uri ']);
}

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top