Apache: Seo редиректы на www

18/12/2022

Настройки прописываются в конфигурационный файл .htaccess

редирект на адрес с www:

RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]
RewriteRule ^(.*)$ http://www.domain.ru/$1 [R=301,L]

Перенаправление с www.domain.ru на domain.ru:

RewriteCond %{HTTP_HOST}  ^www\.(.+)$  [NC]
RewriteRule ^(.*)         http://%1/$1 [L,R=301]

Что здесь происходит: если имя хоста начинается на www., отрезаем www. и выполняем редирект с кодом 301

Еще вариант перенаправления с domain.ru на www.domain.ru:

 
RewriteCond %{HTTP_HOST}   !^$
RewriteCond %{HTTP_HOST}   !^www\.          [NC]
RewriteCond %{HTTP_HOST}   (.+)$
 RewriteRule ^(.*)          http://www.%1/$1 [L,R=301]

Здесь мы проверяем, что имя хоста не пустое и не начинается с www. Добавляем www. к имени хоста и выполняем редирект.

Скрипт для редиректа на javascript


   function redirect(){
      document.location.href = 'http://yandex.ru/';
   }
   setTimeout('redirect();',15000);

Функция редиректа выполнится через 15 секунд

Скрипт для редиректа на php


$host = $_SERVER['HTTP_HOST'];
$prefix = substr($host,0,4);
if ($prefix != "www.") {
	header("HTTP/1.1 301 Moved Permanently");
	header("Location: http://www.".$host.$_SERVER['REQUEST_URI'].$_SERVER['QUERY_STRING']);
	exit();
}

 if (preg_match("/faq\/\?page=([0-9]{1,5})&numpage=([0-9]{1,5})/i", $_SERVER['REQUEST_URI'])) {
    header("HTTP/1.1 301 Moved Permanently");
	header("Location: /faq/page-".$_GET['page']."-".$_GET['numpage']);
	exit();
} 

При совпадении условия по регулярному выражению - происходит редирект на нужный урл

редиректим на урл со слешем


if (preg_match('{^(.+)[^\/]$}', $_SERVER['REQUEST_URI'], $m)) {
    header("HTTP/1.1 301 Moved Permanently");
    $status = "301 Found";
    header("Status: ".$status);
    header("Location: http://www.domain.ru".$m[0]."/");
    exit();
}

Редирект с проверкой на веб-сервер (IIS или другой)


if ($_SERVER['REQUEST_URI']=='/index.php' && $_SERVER['HTTP_HOST']=='domain.ru'){
  $header_location = (@preg_match('/Microsoft|WebSTAR|Xitami/', $_SERVER['SERVER_SOFTWARE'])) ? 'Refresh: 0; URL=' : 'Location: ';
  header($header_location."http://domain.ru/", true, "301");
  exit();
}

Примеры редиректов для nginx


location / {
        # Чтобы избавиться от www, есть два способа:
        # Если вызван какой-то другой домен (поддомен, например)
        if ($host != 'example.com' ) {
             rewrite  ^/(.*)$  http://example.com/$1  permanent;
        }
        # Или, если вызван конкретно поддомен с www
        if ($host = 'www.example.com' ) {
            rewrite  ^/(.*)$  http://example.com/$1  permanent;
        }
        # Замена правилам mod_rewrite от apache 
        if (!-e $request_filename) {
            rewrite ^/(.*)$ /index.php?route=$1 last;
            break;
        }
        index index.php;
    }
RewriteRule .* - [E=HTTP_IF_MODIFIED_SINCE:%{HTTP:If-Modified-Since}]

Теги - Linux , Php , Javascript , Ubuntu