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

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

  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 остаётся домашним заданием читателю :-)

Добавить в закладки

Связанные записи

21
Окт
2008

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

  1. Yohan says:

    Спасибо!

    Только что себе настроил редирект, по первому варианту - все работает!

  2. Vladimir says:

    Да просто поправлял сайт заказчику… Он умудрился так настроить редирект, что Apache просто выдавал 500 Server Error. А последней каплей была статья, описывавшая, как сделать подобный редирект (естественно, примеры были нерабочими). Поэтому я решил найти решение, которое будет работать независимо от имени домена (а также в тех случаях, когда сайт “отзывается” на несколько имен).

  3. evs says:

    спасибо, отличный кодик. подскажи еще код редиректа с одного домена на другой. например: при заходе на site.com перекидывает на site2.com. буду благодарен тебе.

  4. PaLyCH says:

    Это все хорошо. Но при некоторых настройках сервака, эти функции не пашут. Например при FastCGI

  5. codc says:

    подскажи плиз, на виртуальном хосте прописываю указанные выше правила редиректа, а при попытке зайти на страницу у меня в конце адреса прибавляется дополнительный слэш, как с этим бороться, уже практически все перепробывал.
    И еще, обязательно ли указывать ServerAlias в директиве в виде www.domain.com domain.com

    • Vladimir says:

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

      ServerAlias — в общем случае, да.

  6. codc says:

    Поковырял правило, сделал правило таким образом http://%1$1 [L,R=301] все заработало, с www на без www редирект проходит нормально. Все равно спасибо.

  7. Роман says:

    Добрый день Владимир,

    так подскажите пожалуйста, как выполнить редирект с https://www.domain.com на https://domain.com?

    Заранее спасибо.

    • Vladimir says:

      Роман, под рукой Apache/SSL сейчас нет, но должно быть так:

      1. С не-www на www:
        [-]
        View Code Apache configuration
        RewriteCond %{HTTPS}       on                [NC]
        RewriteCond %{HTTP_HOST}   !^$
        RewriteCond %{HTTP_HOST}   !^www\.           [NC]
        RewriteCond %{HTTP_HOST}   (.+)$
        RewriteRule ^(.*)          https://www.%1/$1 [L,R=301]
      2. С www на не-www:
        [-]
        View Code Apache configuration
        RewriteCond %{HTTPS}      on           [NC]
        RewriteCond %{HTTP_HOST}  ^www\.(.+)$  [NC]
        RewriteRule ^(.*)         http://%1/$1 [L,R=301]
  8. Роман says:

    С www на не-www не работает…

  9. Роман says:

    я это исправил, но все равно не работает, могут быть проблемы из-за чпу?

    заранее спасибо.

  10. Виктор says:

    Добрый день Владимир,

    подскажите как выполнить редирект с http://www.serkin.domain.com на http://serkin.domain.com

Подписаться на RSS-ленту комментариев к статье «Apache: устанавливаем редирект с www.domain.com на domain.com и наоборот» Trackback URL: http://blog.sjinks.org.ua/administring/352-apache-how-to-redirect-from-www-and-back/trackback/

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

Вы можете использовать данные тэги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

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

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