Www на non-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
VAR, которые я должен был использовать, чтобы это произошло. Кроме того, сохранение протокола 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://
Незатронут, вместе с портами и тому подобное, если вы используете их.
Как отметил Гумбо, он использует $_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']) &&! ement ($ _ server ['https']) && (strtolower ($ _ server ['https'])! = 'off')) {
$ https = 1;
} еще {
$ https = 0;
}
if (substr ($ _ server ['http_host'], 0, 4)! == 'www.') {
redirect (($ https?
}