Apache: устанавливаем редирект с www.domain.com на domain.com и наоборот

Заезженная до дыр тема, обсуждаемая на всех форумах про и , но, тем не менее, не потерявшая своей актуальности до сих пор.

Правильное решение:

  1. Перенаправление с www.domain.com на domain.com:
    [-]
    View Code Apache configuration
    RewriteCond %{HTTP_HOST}  ^www\.(.+)$  [NC]
    RewriteRule ^(.*)         http://%1/$1 [L,R=301]
    Всё просто: если имя хоста начинается на www., отрезаем www. и выполняем редирект. Я предпочитаю перенаправление с кодом 301, у Вас могут быть свои предпочтения.
  2. Перенаправление с domain.com на www.domain.com:
    [-]
    View Code Apache configuration
    RewriteCond %{HTTP_HOST}   !^$
    RewriteCond %{HTTP_HOST}   !^www\.          [NC]
    RewriteCond %{HTTP_HOST}   (.+)$
    RewriteRule ^(.*)          http://www.%1/$1 [L,R=301]
    Посложнее: проверяем, что имя хоста не пустое и не начинается на www.. Добавляем www. к имени хоста и выполняем редирект.

Разумеется, что mod_rewrite должен быть включен (RewriteEngine On). В целях повышения производительности имеет смысл помещать код не в .htaccess, а непосредственно внутрь директивы <VirtualHost> конфигурационного файла Apache.

Здесь рассмотрен простой случай: протокол HTTPS не используется. Реализация перенаправления с использованием HTTPS остаётся домашним заданием читателю :-)

Автор: ; опубликовано в: Администрирование; метки: Apache, mod_rewrite, redirect
21
Окт
2008

RSS Комментарии к статье «Apache: устанавливаем редирект с www.domain.com на domain.com и наоборот» (31)  »

  1. Иван

    вот такой код

    [-]
    View Code Apache configuration
    RewriteEngine On
    RewriteCond %{HTTP_HOST}   !^$
    RewriteCond %{HTTP_HOST}   !^www\.          [NC]
    RewriteCond %{HTTP_HOST}   (.+)$
    RewriteRule ^(.*)          http://www.%1/$1 [L,R=301]
    RewriteCond %{HTTPS}       on                [NC]
    RewriteCond %{HTTP_HOST}   !^$
    RewriteCond %{HTTP_HOST}   !^www\.           [NC]
    RewriteCond %{HTTP_HOST}   (.+)$
    RewriteRule ^(.*)          https://www.%1/$1 [L,R=301]

    не срабатывает, нужно с без-www на www, как по http так и по https протоколам

  2. Sergey

    Помогите пожалуйста с редиректом https:// на http:// та же проблема что и у Ивана
    Не могу найти решение !

    • У меня Apache давно не стоит, но так вроде бы работает:

      [-]
      View Code Apache configuration
      RewriteCond %{HTTPS} !=on
      RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

      RewriteCond %{HTTP_HOST}   !^$
      RewriteCond %{HTTP_HOST}   !^www\.           [NC]
      RewriteCond %{HTTP_HOST}   (.+)$
      RewriteRule ^(.*)          https://www.%1/$1 [L,R=301]
    • Использовал такую конфигурацию в проекте:

      [-]
      View Code Apache configuration
      RewriteEngine On

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

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

      Работает. Проверка %{HTTPS} не должна быть последней.

  3. Спасибочки! помог !

  4. Виталий

    В чет может быть проблема?
    это для Zend, там все запросы перенаправляются в index.php

    [-]
    View Code PHP
    <code>RewriteRule ^(.*)$ - [E=PROTOCOL:http]
    RewriteCond %{HTTPS} ^on$ [NC]
    RewriteRule ^(.*)$ - [E=PROTOCOL:https]

    RewriteCond %{SCRIPT_FILENAME} !-f
    RewriteCond %{SCRIPT_FILENAME} !-d
    RewriteCond %{SERVER_PORT} ^80$
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
    RewriteRule ^(.*)$ %{ENV:PROTOCOL}://%1/index.php [R=301,L]

    RewriteCond %{SCRIPT_FILENAME} !-f
    RewriteCond %{SCRIPT_FILENAME} !-d
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
    RewriteRule ^(.*)$ %{ENV:PROTOCOL}://%1:%{SERVER_PORT}/index.php [R=301,L]

    RewriteCond %{SCRIPT_FILENAME} !-f
    RewriteCond %{SCRIPT_FILENAME} !-d
    RewriteRule ^(.*)$ index.php [L]</code>
    • Ответил по мылу, не уверен, что ответ получен, поэтому привожу здесь:

      [-]
      View Code Apache configuration
      RewriteRule ^(.*)$ - [E=PROTOCOL:http]
      RewriteCond %{HTTPS} ^on$ [NC]
      RewriteRule ^(.*)$ - [E=PROTOCOL:https]

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

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

      RewriteCond %{SCRIPT_FILENAME} !-f
      RewriteCond %{SCRIPT_FILENAME} !-d
      RewriteRule ^(.*)$ index.php [L]
  5. seojazz

    Добрый день Владимир/
    Подскажите пожалуйста, корректен ли такой редирект?

    [-]
    View Code Apache configuration
    RewriteCond %{HTTP_HOST} !^(www\.site\.com\.ua)?$
    RewriteRule ^(.*)$ http://www.site.com.ua/$1 [R=301,L]

    Стояло 2 задачи:

    1. site.com.ua является главным хостом сервера и был доступен по IP. Необходимо было IP перенаправлять на домен (www.site.com.ua)
    2. Главным зеркалом должен быть домен с www (www.site.com.ua)

    При таком редиректе все работает без проблем, мне важно знать корректен ли он в глазах поисковых систем, не будет ли проблем с индексацией и пр.?

    Заранее благодарю за ответ!

    ps. Изначально был прописан такой редирект (он 100% корректен и поисковики относятся к нему нормально):

    [-]
    View Code Apache configuration
    RewriteCond %{HTTP_HOST} ^site.com.ua
    RewriteRule (.*) http://www.site.com.ua/$1 [R=301,L]

    Все работало идеально. Однако в Сафари не происходило перенаправление с http://ip/ на http://www.site.com.ua/, я не могу объяснить такой парадокс, но это факт.

    • Wandering Soul

      Похоже на правду.

      Пл поводу Safari — есть подозрение, что в случае с IP-адресом не отправлялся заголовок Host. В результате чего правило и не срабатывало.

Пожалуйста, не используйте эту форму для комментирования! Данная форма предназначена исключительно для ботов.

Оставить комментарий к записи «Apache: устанавливаем редирект с www.domain.com на domain.com и наоборот»

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Оставляя комментарий, вы выражаете своё согласие с Правилами комментирования.

Подписаться, не комментируя

गते गते पारगते पारसंगते बोधि स्वाहा