Я хочу перенаправить все запросы 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 было бы плюсом.
Как мне это сделать?
$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 ']);
}