Вопрос

Я хочу перенаправить все запросы 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?
}

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top