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?

È stato utile?

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']);
        }

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top