2015-12-09 3 views
-1

Я хочу перенаправить URL-адрес, отличный от www, на php.Переадресовать не-www на www с помощью функции php header()

Я знаю, что это может быть легко достигнуто с помощью mod_rewrite в htaccess. Но я хотел бы сделать это перенаправление, используя php header().

Я написал сценарий, который проверяет, есть ли хост с или без www.

$url=$_SERVER["HTTP_REFERER"]; 
if(preg_match_all("/http:\/\/www\./i",$url,$m)) 
{echo "host has www";} 

еще {эхо «хост не начиная с WWW»;}

Как я могу идти вперед с ним и добавить заголовок с 301 статусом, чтобы перенаправить его www.domain.com если оригинальная хост - не-www?

Возможно ли такое перенаправление в php?

ответ

4

Вы можете сделать это нравится:

if (strpos($_SERVER['HTTP_HOST'], 'www') === false) { 
    $protocol = isset($_SERVER['HTTPS']) && filter_var($_SERVER['HTTPS'], FILTER_VALIDATE_BOOLEAN) 
     ? 'https' 
     : 'http'; 
    header(
     "Location: $protocol://www." . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 
     true, 
     301 
    ); 
} 
+1

Спасибо за ответ matei, он отлично работает. – starkeen

+0

Это перенаправление 302? – starkeen

+1

Вы можете поместить любой 'http_response_code' в качестве третьего параметра функции заголовка –

2

header('Location: http://www.YOURDOMAIN.com/foo/bar?foo=bar', true, 301);

Проверьте это here.

+0

Спасибо, Как я добавить perameters к целевой URL? – starkeen

+0

Что значит? Путь '../ foo/bar' или некоторый querystring'? Foo = bar' просто присоединяют его к URL-адресу. – nipeco

+1

У меня есть рабочий ответ, спасибо вам за помощь. – starkeen

2

Вы проверяете REFERER не имя хоста.

$protocol = (@$_SERVER["HTTPS"] == "on") ? "https://" : "http://"; 

if (substr($_SERVER['HTTP_HOST'], 0, 4) !== 'www.') { 
    header('Location: ' . $protocol.'www.' . $_SERVER['HTTP_HOST'] . '/' . $_SERVER['REQUEST_URI'], true, 301); 
    exit; 
} 

Нечто подобное.

+0

Хороший ответ, также рассмотрим разницу между 301 и 302 переадресацией, которая может быть установлена ​​в третьем параметре команды заголовка. –

+0

Undefined index "https" – starkeen

+0

HTTPS не установлен для каждого запроса, поэтому я обновил код. – Stony

Смежные вопросы