Www zu Nicht-www-Umleitung mit PHP
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?
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 ']);
}