Apache: устанавливаем редирект с www.domain.com на domain.com и наоборот
Заезженная до дыр тема, обсуждаемая на всех форумах про Apache и mod_rewrite, но, тем не менее, не потерявшая своей актуальности до сих пор.
Правильное решение:
- Перенаправление с
www.domain.comнаdomain.com:[-]View Code Apache configurationВсё просто: если имя хоста начинается наRewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*) http://%1/$1 [L,R=301]www., отрезаемwww.и выполняем редирект. Я предпочитаю перенаправление с кодом 301, у Вас могут быть свои предпочтения. - Перенаправление с
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 остаётся домашним заданием читателю
Окт
2008
Комментарии к статье «Apache: устанавливаем редирект с www.domain.com на domain.com и наоборот» (31) »
Пожалуйста, не используйте эту форму для комментирования! Данная форма предназначена исключительно для ботов.
Оставить комментарий к записи «Apache: устанавливаем редирект с www.domain.com на domain.com и наоборот»
गते गते पारगते पारसंगते बोधि स्वाहा
Меня зовут Владимир, я программист-фрилансер, специализирующийся на Web-программировании и програмировании под Linux.
По совместительству занимаюсь администрированием LAMP/LNMP-серверов и техническим переводом.


вот такой код
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 протоколам
А какой редирект не срабатывает?
https не срабатывает
Не заметил, проверку на SSL нужно делать до обычной проверки, а не после. Иначе срабатывают первые
RewriteCond, и вместоhttpsполучаетсяhttp.т.е. сначала на https, потом на http делать?
вроде работает
но опять беда
если ввожу
https://site.ru/papka/не перекидывает наhttps://www.site.ru/papka/Да. Потому что условия по сути дела одни и те же.
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} (.+)$
сработают вне зависимости от HTTPS.
и как прописать правильно?
Помогите пожалуйста с редиректом https:// на http:// та же проблема что и у Ивана
Не могу найти решение !
У меня Apache давно не стоит, но так вроде бы работает:
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]
Использовал такую конфигурацию в проекте:
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}не должна быть последней.Спасибочки! помог !
В чет может быть проблема?
это для Zend, там все запросы перенаправляются в index.php
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>
Ответил по мылу, не уверен, что ответ получен, поэтому привожу здесь:
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]
Добрый день Владимир/
Подскажите пожалуйста, корректен ли такой редирект?
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% корректен и поисковики относятся к нему нормально):
RewriteRule (.*) http://www.site.com.ua/$1 [R=301,L]
Все работало идеально. Однако в Сафари не происходило перенаправление с http://ip/ на http://www.site.com.ua/, я не могу объяснить такой парадокс, но это факт.
Похоже на правду.
Пл поводу Safari — есть подозрение, что в случае с IP-адресом не отправлялся заголовок Host. В результате чего правило и не срабатывало.