WWW alla non-WWW di reindirizzamento con PHP
Domanda
Voglio reindirizzare tutte le richieste di www.domain.com domain.com con PHP, in fondo:
if (substr($_SERVER['SERVER_NAME'], 0, 4) === 'www.')
{
header('Location: http://' . substr($_SERVER['SERVER_NAME'], 4)); exit();
}
Comunque io voglio mantenere l'URL richiesto come in SO, per es.
http://www.stackoverflow.com/questions/tagged/php?foo=bar
dovrebbe reindirizzare a:
http://stackoverflow.com/questions/tagged/php?foo=bar
Non voglio fare affidamento su soluzioni .htaccess
, e io sono sicuro che $_SERVER
Vars avrei dovuto usare per fare questo accadere. Inoltre, conservando il protocollo HTTPS sarebbe un plus.
Come devo fare questo?
Soluzione
$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);
Sarebbe reindirizzare l'utente alla pagina di esattamente lo stesso, www. intatto.
Quindi, per sbarazzarsi del www. , Ci basta sostituire una sola riga:
$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;
E che dovrebbe funzionare.
A proposito, questo è il metodo che è raccomandato da Google, poiché si conserva intatto https://
, insieme con le porte e come se li si usa.
Come Gumbo ha sottolineato, usa $_SERVER['HTTP_HOST']
come viene dalle intestazioni al posto del server, quindi $_SERVER['SERVER_*']
non è affidabile. È possibile sostituire some$_SERVER['SERVER_NAME']
con $_SERVER['HTTP_HOST']
, e dovrebbe funzionare allo stesso modo.
Altri suggerimenti
Prova questo:
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']) &&! Empty ($ _ SERVER [ 'HTTPS']) && (strtolower ($ _ SERVER [ 'HTTPS'])! = 'Off')) {
$ https = 1;
} Else {
$ Https = 0;
}
if (substr ($ _ SERVER [ 'HTTP_HOST'], 0, 4)! == 'www.') {
reindirizzare (($ https 'https: //': 'http: //'?.'. $ _SERVER) .'www [ 'HTTP_HOST']. $ _ SERVER [ 'REQUEST_URI']);
}