WWW à la non-WWW Rediriger avec PHP
Je veux rediriger toutes les www.domain.com les demandes de domain.com avec PHP, en gros:
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, par exemple:
http://www.stackoverflow.com/questions/tagged/php?foo=bar
Doit rediriger vers:
http://stackoverflow.com/questions/tagged/php?foo=bar
Je ne veux pas compter sur .htaccess
solutions, et je ne suis pas sûr qui $_SERVER
vars j'aurais à utiliser pour ce faire. Aussi, la préservation du protocole HTTPS serait un plus.
Comment dois-je faire cela?
- C'est beaucoup plus facile à faire avec le mod_rewrite d'Apache plutôt que de PHP; de cette façon, il a déjà été fait avant l'application de la couche est impliquée à tous.
- Je sais, mais je ne suis pas en utilisant Apache et j'ai besoin d'une solution portable.
Vous devez vous connecter pour publier un commentaire.
Serait de rediriger l'utilisateur vers la même page, www. intacte.
Donc, pour se débarrasser de la www. , nous venons de remplacer une ligne:
Et cela devrait fonctionner.
Par la voie, c'est la méthode qui est recommandée par Google, car il se conserve
https://
, intact, accompagné de ports et de tel si vous ne les utilisez.Que le Gombo a souligné, il utilise
$_SERVER['HTTP_HOST']
comme il vient de le les en-têtes à la place du serveur, ainsi$_SERVER['SERVER_*']
n'est pas aussi fiable. Vous pouvez remplacer certains$_SERVER['SERVER_NAME']
avec$_SERVER['HTTP_HOST']
, et il devrait fonctionner de la même manière.Essayez ceci:
if (substr($_SERVER['HTTP_HOST'], 0, 4) === 'exam') { header('Location: http://' . substr($_SERVER['HTTP_HOST'], 0).$_SERVER['REQUEST_URI']); exit; }
//suivie par la deuxième instruction if://if (substr($_SERVER['HTTP_HOST'], 0, 4) === 'www.') { header('Location: http://' . 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.") {
redirect(($https?'https://':'http://') .'www.' . $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
}