Question

Je veux rediriger toutes les demandes de www.domain.com DOMAIN.COM avec PHP, essentiellement:

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

Cependant, je ne veux maintenir l'URL demandée comme dans SO, pour par exemple:.

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

devrait rediriger vers:

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

Je ne veux pas compter sur les solutions de .htaccess, et je ne suis pas sûr que $_SERVER vars je dois utiliser pour ce faire. De plus, en préservant le protocole HTTPS serait un plus.

Comment dois-je faire?

Était-ce utile?

La solution

$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);

redirigerez l'utilisateur à l'exacte même page, www. intact.

Alors, pour se débarrasser du www. , Nous remplaçons une seule ligne:

$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;

Et cela devrait fonctionner.

Par ailleurs, c'est la méthode recommandée par Google, car il ne cesse de https:// intacte, ainsi que des ports et comme si vous les utilisez.


Gumbo a fait remarquer, il utilise $_SERVER['HTTP_HOST'] comme il vient de les en-têtes au lieu du serveur, ainsi $_SERVER['SERVER_*'] est pas aussi fiable. Vous pouvez remplacer some$_SERVER['SERVER_NAME'] avec $_SERVER['HTTP_HOST'], et il devrait fonctionner de la même manière.

Autres conseils

Essayez ceci:

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;
        }
        si (substr ($ _ SERVER [ 'HTTP_HOST'], 0, 4)! == 'www.') {
            rediriger (($ https 'https: //': 'http: //'?.. _SERVER $) .'www [ 'HTTP_HOST']. $ _ SERVER [ 'REQUEST_URI']);
        }

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top