WWW для перенаправления WWW с PHP

Я хочу перенаправить все запросы www.domain.com на domain.com с PHP, в основном:

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

Однако я хочу сохранить запрошенный URL-адрес, например, в SO, например:

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

Если необходимо перенаправить на:

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

Я не хочу полагаться на решения .htaccess , и я не уверен, какие $_SERVER vars мне придется использовать, чтобы это произошло. Кроме того, сохранение протокола HTTPS было бы плюсом.

Как мне это сделать?

Related of "WWW для перенаправления WWW с PHP"

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

Переадресует пользователя на ту же страницу, www. неповрежденными.

Итак, чтобы избавиться от www. , мы просто заменяем одну строку:

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

И это должно сработать.

Кстати, это метод, рекомендованный Google, поскольку он сохраняет https:// intact, наряду с портами и т. Д., Если вы их используете.


Как отметил Гумбо, он использует $_SERVER['HTTP_HOST'] поскольку он исходит из заголовков вместо сервера, поэтому $_SERVER['SERVER_*'] не так надежен. Вы можете заменить некоторый $_SERVER['SERVER_NAME'] на $_SERVER['HTTP_HOST'] , и он должен работать одинаково.

Попробуй это:

 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.') {
redirect (($ https? 'https: //': 'http: //') .'www. '. $ _SERVER [' HTTP_HOST ']. $ _ SERVER [' REQUEST_URI ']);
}