Расскажу на примере своего блога - Vitalik.WS. Изначально у меня был лишь просто домен - vitalik.ws. Моя задача:
- убрать www (то есть мне не нужна версия www.vitalik.ws);
- убрать версию без https (я перенёс сайт на защищенный протокол https://vitalik.ws/ и нужно убрать стандартную версию http://vitalik.ws/).
http://www.vitalik.ws/, http://vitalik.ws/ https://www.vitalik.ws/
приходили в итоге к https://vitalik.ws/.
Первым делом в .htaccess прописываем директиву
RewriteEngine On
Она нужна, что бы включить модуль, который будет делать 301 редиректы и обрабатывать всю информацию.
301 редирект без www в .htaccess
Первым среди 301 редиректов разберём ситуацию, когда нужно избавиться от пережитка прошлого - поддомена "www." в URL сайта. В моей задаче номер один это и нужно сделать. Поэтому, если вы хотите сделать на своём сайте 301 редирект без www, то в файле .htaccess нужно прописать:
RewriteEngine On # not www RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
Обратите внимание, что в примере конечный протокол не защищенный (то есть используется http://). Если хотите сделать, что бы редирект был сразу на защищенный протокол, то замените в примере http:// на https://.
301 редирект на www в .htaccess
Если же кто-то предпочитает всё-таки вернуться или остаться на старом добром www поддомене, тогда в файле .htaccess нужно прописать:
RewriteEngine On # on www RewriteCond %{HTTP_HOST} !^www\.(.*) [NC] RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]
Повторюсь: обратите внимание, что в примере конечный протокол не защищенный (то есть используется http://). Если хотите сделать, что бы редирект был сразу на защищенный протокол, то замените в примере http:// на https://.
301 редирект на https в .htaccess (защищенный протокол ssl)
Если требуется сделать 301 редирект на защищенный протокол ssl (https), то в файле .htaccess нужно прописать:
RewriteEngine On # ssl only RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
301 редирект на http в .htaccess (убираем защищенный протокол https, ssl)
Если же вы наоборот хотите вернуться к старому доброму протоколу http без шифрования, то в файле .htaccess нужно прописать:
RewriteEngine On # not ssl RewriteCond %{HTTPS} on RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Как сделать 301 редирект на моём примере?
Для того, что бы сделать правильный 301 редирект в моём примере (убрать www и убрать версию без https), необходимо собрать всё описанное выше воедино и вписать в .htaccess следующий код:
RewriteEngine On # not www RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ https://%1/$1 [R=301,L] # ssl only RewriteCond %{REQUEST_URI} !robots.txt RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
В итоге www и http вариации автоматически переадресует на https://vitalik.ws/.
Зачем же я добавил строку:
RewriteCond %{REQUEST_URI} !robots.txt
Об этом читайте в моей статье о правильном переходе на HTTPS.
Теперь Вы знаете как сделать 301 редирект на www, без www и на https с помощью .htaccess. Надеюсь, что помог Вам. Обязательно пишите свои наблюдения в комментариях.
Все комментарии к заметке "301 редирект на www, без www и на https с помощью .htaccess"
Оставьте свой комментарий первым!