Файлы .htaccess могут находиться в корневом каталоге сайта (например, /home/user/sitename/) или его вложенных каталогах. Они используются для организации перенаправления («редиректа») посетителей с одного домена или документа на вашем веб-сервере на другой. Каждый файл .htaccess содержит набор правил (директив), в соответствии с которыми веб-сервер перенаправляет пользователя на ту или иную страницу.
Многие системы управления контентом берут настройки редиректа сайта из .htaccess. Вы можете редактировать файлы, созданные вашей CMS, вводя новые директивы перенаправления, либо создавать свои собственные файлы .htaccess вручную.
Создание файла .htaccess
Первым этапом настройки редиректа .htaccess является, собственно, создание самого файла. Ваш .htaccess должен быть простым текстовым файлом. Это означает, что вам нужно создать его в программе для редактирования текста, способной генерировать файлы plain text (.txt).
- На компьютере с Windows вы можете использовать «Блокнот», который является одной из встроенных стандартных программ.
- На Mac вы можете использовать TextEdit. Сначала вы должны открыть меню «Настройки» в TextEdit и в разделе «Новый документ» выбрать «Простой текст». После этого вы можете начать процесс создания нового текстового документа TextEdit для вашего файла .htaccess.
- На Linux вы можете использовать любой из многочисленных текстовых редакторов, доступных для вашего дистрибутива – как консольных (vi, nano), так и графических (к примеру, gedit).
При сохранении документа обязательно назовите его htaccess.txt. Если вы сохраните его просто как .htaccess, ваш компьютер скроет файл. Это происходит потому, что файлы, начинающиеся с точки, считаются системными файлами.
Загрузка файла .htaccess на сервер
Для корректного редиректа через .htaccess файл должен быть загружен именно в тот каталог на сервере, для которого вы хотите задать настройки перенаправления. Как правило, это ваш каталог HTML-файлов (/var/www/vhosts/example.com/httpdocs/), хотя вы можете загрузить его и в любой подкаталог на вашем сервере.
Как только файл будет загружен, переименуйте его непосредственно в .htaccess.
На этом этапе файл может стать невидимым для вашего FTP-клиента, поскольку теперь он имеет формат системного файла. Многие клиенты FTP позволяют просматривать скрытые файлы и папки – рекомендуется включить эту функцию. Для получения инструкций по ее включению обратитесь к документации своего клиента.
Проверяем работу .htaccess
Наиболее простым способом проверить, обрабатывает ли веб-сервер ваш файл .htaccess, является его намеренное повреждение.
Отредактируйте файл .htaccess таким образом, чтобы первая строка начиналась со слова Test:
Test
# Установить главную страницу
DirectoryIndex page.html page.txt …
Теперь, если вы перезагрузите главную страницу своего сайта, вы увидите следующую ошибку (на фото ниже).
Если данная ошибка появляется, то это, на самом деле, хорошо — значит сервер обрабатывает ваш файл и читает из него директивы переадресации. Если нет, убедитесь, что файл и каталог, в котором он находится, доступны для чтения и при необходимости измените права доступа.
Немного о приоритетах редиректа .htaccess
Правила .htaccess являются рекурсивными. То есть директивы, написанные в файле /home/user/sitename_html/.htaccess будут применяться и к этому каталогу, и к его дочерним папкам — за исключением случаев, если какое-то конкретное правило отменяется с помощью директивы в файле .htaccess, находящемся в дочернем каталоге.
Таким образом, настройки редиректа через .htaccess, задаваемые файлом на более высоком уровне, переопределяются настройками файлов, находящихся на более низких уровнях. Например, если вы хотите включить перенаправление для большей части вашего сайта, но отключить его для определенного каталога, вы можете сформировать отдельный .htaccess с соответствующими настройками и загрузить его только в этот каталог.
Аналогичным образом файлы .htaccess нижнего уровня переопределяют настройки PHP в файлах vhost.conf и php.ini на более высоких уровнях, если только переопределение явно не запрещено для этих файлов.
Наконец, порядок следования правил редиректа .htaccess в файле может иметь значение для определенных типов директив. Список правил обрабатывается последовательно от начала к концу; директивы в начале файла будут выполнены первыми.
Редирект .htaccess: основные виды
Существуют различные типы переадресаций, которые могут выполняться через файлы .htaccess. Разберем их, и рассмотрим каждый тип прежде, чем научиться их использовать.
301: редирект на постоянной основе
Это наиболее распространенный тип переадресации и, скорее всего, именно тот, который вы будете чаще всего настраивать. В файле .htaccess 301 редирект страницы указывает, что ее старый URL-адрес (перенаправляемый URL-адрес) больше не используется.
302: временный редирект
Редирект 302 указывает, что старый URL-адрес страницы временно отключен, но будет восстановлен в ближайшее время. Для сервера Apache это правило перенаправления используется по умолчанию.
Таким образом, перед тем как настраивать редирект .htaccess, нужно определиться, постоянным или временным будет перенаправление. Для примеров в данной статье мы будем использовать редирект 301.
Примеры сценариев перенаправления
Ниже приведены наиболее распространенные примеры редиректа .htaccess.
Для того чтобы использовать любой из них, необходимо открыть созданный вами файл .htaccess любым текстовым редактором и внести в него требуемый пример кода.
Чтобы код заработал, в веб-сервере Apache должен быть включен модуль перезаписи (mod_rewrite). Для этого требуется выполнить ряд действий в зависимости от вашей ОС.
На Windows сделайте следующее:
-
Найдите и откройте файл .http.conf. Он находится в каталоге, в который вы установили Apache.
-
Создайте резервную копию http.conf, чтобы в случае необходимости восстановить файл, если вы допустите какие-то ошибки.
-
Найдите в файле строку #LoadModule rewrite_module modules/mod_rewrite.so и раскомментируйте его (уберите знак #).
-
Найдите блок, заключенный в тэги <directory> и замените его на <directory/> Options All AllowOverride All </directory>.
-
Отыщите все упоминания «AllowOverride None» и везде замените их на «AllowOverride All».
-
Перезапустите веб-сервер и ваш браузер.
На Linux достаточно выполнить в терминале:
sudo a2enmod rewrite
Эта команда запустит модуль или выдаст уведомление о том, что модуль уже запущен. Чтобы привести в действие новые изменения, перезапустите Apache командой в терминале:
sudo service apache2 restart
Теперь мы можем приступить к редактированию файла .htaccess и изучению наиболее распространенных директив перенаправления.
1. Редирект с одной страницы на другую в .htaccess:
Redirect 301 /retiredpage.html http://www.example.com/newpage.html
2. Переадресация папки (со всем содержимым):
RedirectMatch 301 ^/olddir/ http://www.yourdomain.com/newdir/
3. Редирект страницы в .htaccess с удалением WWW:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.sitename.com$ [NC]
RewriteRule ^(.*)$ http://sitename.com/$1 [L,R=301]
4. Перенаправление с добавлением WWW:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.samplehost.com$ [NC]
RewriteRule ^(.*)$ http://www.samplehost.com/$1 [L,R=301]
5. Редирект на другой домен в .htaccess (перенос сайта целиком):
RedirectMatch 301 ^(.*)$ http://www.yoursite.com
6 .htaccess-редирект файлов HTML на PHP-файлы:
RedirectMatch 301 (.*).html$ http://www.examplesite.com$1.php
7. Переадресация страниц с добавлением HTTPS:
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{SERVER_NAME}/$1 [R=permanent,L]
8. Заменить все прописные буквы в URL-адресе на строчные:
<IfModule mod_rewrite.c>
RewriteMap lc int:tolower
</IfModule>
Данный фрагмент кода необходимо добавить в httpd.conf вашего веб-сервера. После этого требуется открыть файл .htaccess и внести:
RewriteEngine On
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule . ${lc:%{REQUEST_URI}} [R=301,L]
9. Использование регулярных выражений. Правила редиректа часто содержат символы, которые складываются в регулярные выражения. Благодаря этому сервер точно знает, что вы хотите изменить в URL. Однако регулярные выражения могут быть сложными для понимания с первого взгляда. Вот некоторые общие элементы, которые вы можете увидеть и использовать в своих правилах перезаписи URL, а также конкретные примеры их использования:
-
^ : начало заменяемой строки;
-
$ : конец заменяемой строки.
Пример: регулярное выражение ^folder1$ дает сигнал найти и заменить текст «folder1» внутри ссылки.
-
. : любой символ, не являющийся пробелом (например, a, B, 3);
-
* : указывает, что предшествующий текст может повторяться любое число раз;
Пример: регулярное выражение ^uploads.*$ позволяет заменить текст «uploads2009», «uploads2010» и так далее;
Регулярное выражение ^.*$ обозначает «найти что угодно». Оно полезно в том случае, если вы не знаете, что пользователь может ввести в тексте URL.
-
() : выделяют фрагмент текста, который должен быть использован в правиле в качестве значения переменной $1. Это необходимо, к примеру, для обработки запросов к конкретным файлам, которые должны быть одинаковыми и для старой, и для новой версии URL.
Ошибка 404 Not Found
Иногда происходит так, что при настройке перенаправления возникают ошибки. Рассмотрим основные причины, почему может не работать редирект .htaccess.
Распространенной является ошибка 404 Not Found, возникающая при переадресации. В этом случае необходимо внимательно изучить URL, сформированную в адресной строке. Существует ли нужный файл в новом местоположении на сервере, заданном правилом переадресации? Вам может потребоваться скопировать файлы из вашего старого местоположения в новое место, либо сделать правило перенаправления более широким, чтобы в случае отсутствия нужного файла по ссылке происходило перенаправление на главную страницу сайта.
Если же URL-адрес просто неверен (например, http://example.com/folder1//file.html — обратите внимание на два слэша), вам нужно пересмотреть синтаксис правила переадресации.
Бесконечный URL, таймаут или цикл
Если формирующийся при перенаправлении URL-адрес слишком длинный, либо страница слишком долго не загружается, либо ваш браузер дает сообщение об ошибке перенаправления, скорее всего, несколько правил переадресации конфликтуют между собой.
Нужно проверить весь файл .htaccess на предмет правил переадресации, которые могут совпадать с другими правилами. Вам также может потребоваться проверить файлы .htaccess в подкаталогах. Обратите внимание, что FTP не будет показывать файлы .htaccess, если вы не включили возможность просмотра скрытых файлов и папок.
Кроме того, можно включать перенаправления внутри HTML и PHP-страниц. Проверьте страницу, с которой происходит проблема, на предмет внутренних переадресаций.
Добавление [L] после правила перенаправления может помочь в некоторых случаях, поскольку данный флаг командует серверу прекратить попытки перенаправления URL-адреса после применения правила.
Как сделать редирект без .htaccess
В заключение рассмотрим, как сделать перенаправление URL-адреса без редактирования файла .htaccess, используя виртуальный хост сервера Apache. Кстати говоря, этот метод проще, чем составление правил редиректа страницы в .htaccess.
Откройте текстовым редактором конфигурационный файл vhost (httpd.conf), который обычно располагается в каталоге /etc/apache2/sites/sitename.
Выделенный фрагмент образца файла демонстрирует перенаправление:
<VirtualHost *:80>
ServerName www.mysite.com
ServerAlias www.mysite.com
Redirect / http://mysite.com
</VirtualHost>
Конфигурация, приведенная выше, перенаправляет все запросы на домен без субдомена WWW.
Чтобы перенаправить все запросы на домен с субдоменом WWW, измените конфигурацию, как показано ниже.
<VirtualHost *:80>
ServerName anywebsite.com
ServerAlias anywebsite.com
Redirect / http://www.anywebsite.com
</VirtualHost>
Перезагрузите Apache, и сайт начнет правильно перенаправляться. Вышеприведенный способ является наиболее простым, и его легче осуществить, нежели редирект с одной страницы на другую в htaccess.
fb.ru
Добрый день. Не могу найти 301 редирект со страниц без слеша на слеш, ваши варианты тоже не подошли, можете помочь? Ниже предоставляю свой файл .htaccess
AddDefaultCharset UTF-8
DirectoryIndex index.php
Options All -Indexes
Header set Cache-Control «max-age=43200»
Header set Cache-Control «max-age=604800»
Header set Cache-Control «max-age=2592000»
Header unset Cache-Control
ExpiresActive On
ExpiresDefault «access plus 5 seconds»
ExpiresByType image/x-icon «access plus 2592000 seconds»
ExpiresByType image/jpeg «access plus 2592000 seconds»
ExpiresByType image/png «access plus 2592000 seconds.
ml «access plus 43200 seconds»
ExpiresByType application/xhtml+xml «access plus 600 seconds»
php_value post_max_size 80M
php_value upload_max_filesize 50M
ErrorDocument 404 http://mir-gardin.com.ua/404.php
RewriteEngine on
RewriteCond %{HTTP_HOST} ^mir-gardin.com.ua$ [NC]
RewriteBase /
RewriteRule ^.htaccess$ — [F]
RewriteRule ^admin/$ /admin/index.php [L]
RewriteRule ^admin/promotion$ /admin/promotion.php [L]
RewriteRule ^admin/promotion/$ /admin/promotion.php [L]
RewriteRule ^admin/services$ /admin/services.php [L]
RewriteRule ^admin/services/$ /admin/services.php [L]
RewriteRule ^admin/main$ /admin/main.php [L]
RewriteRule ^admin/main/$ /admin/main.php [L]
RewriteRule ^admin/catalog$ /admin/catalog.php [L]
RewriteRule ^admin/catalog/$ /admin/catalog.php [L]
RewriteRule ^admin/contacts$ /admin/contacts.php [L]
RewriteRule ^admin/contacts/$ /admin/contacts.php [L]
RewriteRule ^admin/news$ /admin/news.php [L]
RewriteRule ^admin/news/$ /admin/news.php [L]
RewriteRule ^admin/about_us$ /admin/about_us.php [L]
RewriteRule ^admin/about_us/$ /admin/about_us.php [L]
RewriteRule ^admin/pay$ /admin/pay.php [L]
RewriteRule ^admin/pay/$ /admin/pay.php [L]
RewriteRule ^admin/reviews$ /admin/reviews.php [L]
RewriteRule ^admin/reviews/$ /admin/reviews.php [L]
RewriteRule ^admin/our_works$ /admin/faq.php [L]
RewriteRule ^admin/our_works/$ /admin/faq.php [L]
RewriteRule ^admin/producers$ /admin/producers.php [L]
RewriteRule ^admin/producers/$ /admin/producers.php [L]
RewriteRule ^admin/fotogallery$ /admin/fotogallery.php [L]
RewriteRule ^admin/fotogallery/$ /admin/fotogallery.php [L]
RewriteRule ^admin/header$ /admin/header.php [L]
RewriteRule ^admin/header/$ /admin/header.php [L]
RewriteRule ^admin/menu$ /admin/menu.php [L]
RewriteRule ^admin/menu/$ /admin/menu.php [L]
RewriteRule ^admin/options_lr$ /admin/options_lr.php [L]
RewriteRule ^admin/options_lr/$ /admin/options_lr.php [L]
RewriteRule ^admin/modules$ /admin/modules.php [L]
RewriteRule ^admin/modules/$ /admin/modules.php [L]
RewriteRule ^admin/footer$ /admin/footer.php [L]
RewriteRule ^admin/footer/$ /admin/footer.php [L]
RewriteRule ^admin/per_page$ /admin/per_page.php [L]
RewriteRule ^admin/per_page/$ /admin/per_page.php [L]
RewriteRule ^admin/rights$ /admin/rights.php [L]
RewriteRule ^admin/rights$ /admin/rights.php [L]
RewriteRule ^admin/user_data$ /admin/user_data.php [L]
RewriteRule ^admin/user_data/$ /admin/user_data.php [L]
RewriteRule ^admin/user_files$ /admin/user_files.php [L]
RewriteRule ^admin/user_files/$ /admin/user_files.php [L]
RewriteRule ^admin/meta$ /admin/meta.php [L]
RewriteRule ^admin/meta/$ /admin/meta.php [L]
RewriteRule ^admin/fav$ /admin/fav.php [L]
RewriteRule ^admin/fav/$ /admin/fav.php [L]
RewriteRule ^admin/files$ /admin/files.php [L]
RewriteRule ^admin/files/$ /admin/files.php [L]
RewriteRule ^admin/articles$ /admin/articles.php [L]
RewriteRule ^admin/articles/$ /admin/articles.php [L]
RewriteRule ^$ /index.php [L]
#RewriteRule ^404$ /404.php [L]
RewriteRule ^registration$ /registration.php [L]
RewriteRule ^registration/$ /registration.php [L]
RewriteRule ^userpanel$ /userpanel.php [L]
RewriteRule ^userpanel/$ /userpanel.php [L]
RewriteRule ^forgot_password$ /forgot_password.php [L]
RewriteRule ^forgot_password/$ /forgot_password.php [L]
RewriteRule ^feedback$ /feedback.php [L]
RewriteRule ^feedback/$ /feedback.php [L]
RewriteRule ^about_us$ /about.php [L]
RewriteRule ^about_us/$ /about.php [L]
RewriteRule ^articles$ /articles.php?page=1 [L]
RewriteRule ^articles/$ /articles.php?page=1 [L]
RewriteRule ^articles/page$ /articles.php?page=1 [L]
RewriteRule ^articles/page/$ /articles.php?page=1 [L]
RewriteRule ^articles/page/([0-9]+)/? /articles.php?page=$1 [L]
RewriteRule ^articles/topic/(.*)/? /view_article.php?id=$1 [L]
RewriteRule ^cart$ /cart.php [L]
RewriteRule ^cart/$ /cart.php [L]
RewriteRule ^catalog$ /catalog.php?page=1 [L]
RewriteRule ^catalog/$ /catalog.php?page=1 [L]
RewriteRule ^catalog/page$ /catalog.php?page=1 [L]
RewriteRule ^catalog/page/$ /catalog.php?page=1 [L]
RewriteRule ^catalog/page/([0-9]+)/? /catalog.php?page=$1 [L]
RewriteRule ^catalog/category/(.*)/page/([0-9]+)/? /catalog_by_cats.php?cat=$1&page=$2 [L]
RewriteRule ^catalog/category/(.*)? /catalog_by_cats.php?cat=$1&page=1 [L]
RewriteRule ^catalog/subcategory/(.*)/page/([0-9]+)/? /catalog_by_subcats.php?cat=$1&page=$2 [L]
RewriteRule ^catalog/subcategory/(.*)? /catalog_by_subcats.php?cat=$1&page=1 [L]
RewriteRule ^catalog/view/(.*)/? /view_item.php?id=$1 [L]
RewriteRule ^catalog/view_all/(.*)/view/(.*)/? /view_all.php?type=$1&cat=$2 [L]
RewriteRule ^catalog/view_all/(.*)? /view_all.php?type=all&cat=0 [L]
RewriteRule ^contacts$ /contacts.php [L]
RewriteRule ^contacts/$ /contacts.php [L]
RewriteRule ^our_works$ /faq.php [L]
RewriteRule ^our_works/$ /faq.php [L]
RewriteRule ^news$ /news.php?page=1 [L]
RewriteRule ^news/$ /news.php?page=1 [L]
RewriteRule ^news/page$ /news.php?page=1 [L]
RewriteRule ^news/page/$ /news.php?page=1 [L]
RewriteRule ^news/page/([0-9]+)/? /news.php?page=$1 [L]
RewriteRule ^news/topic/(.*)/? /view_news.php?id=$1 [L]
RewriteRule ^pay$ /pay.php [L]
RewriteRule ^pay/$ /pay.php [L]
RewriteRule ^producers/(.*)/page/([0-9]+)/? /producers.php?id=$1&page=$2 [L]
RewriteRule ^producers/(.*)? /producers.php?id=$1&page=1 [L]
RewriteRule ^producers$ /producers.php [L]
RewriteRule ^producers/$ /producers.php [L]
RewriteRule ^reviews$ /reviews.php [L]
RewriteRule ^reviews/$ /reviews.php [L]
RewriteRule ^search/(.*)/? /search.php?word=$1 [L]
RewriteRule ^services$ /services.php [L]
RewriteRule ^services/$ /services.php [L]
RewriteRule ^thanks$ /thanks.php [L]
RewriteRule ^thanks/$ /thanks.php [L]
RewriteCond %{HTTP_HOST} ^www.mir-gardin.com.ua$ [NC]
RewriteRule ^(.*)$ http://mir-gardin.com.ua/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.php HTTP/
RewriteRule ^index.php$ http://mir-gardin.com.ua/ [R=301,L]
web-optimizator.com
Правила приведены для сервера Apache. В правилах: %{QUERY_STRING}
— обозначает фрагмент URL-адреса после знака вопроса (задания значений CGI-параметров). Срабатывание того или иного правила для редиректа определяется тем, попадает URL-адрес страницы под это правило или нет. О значении тех или иных обозначений (^, $, NC и т.д.) см. памятку в конце страницы.
Ниже даны наиболее используемые правила настройки файла .htaccess для 301 редиректа. Лучше размещать все правила после двух строк:
Options +FollowSymLinks RewriteEngine On
RewriteCond %{HTTP_HOST} ^site.ru$ [NC] RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^www.site.ru$ [NC] RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
Redirect 301 /was.php http://www.site.ru/new.php
При этом, новый адрес указывать необходимо полностью с http и доменным именем.
RewriteRule ^dir /dir-new/$1 [R=301,L]
Скажем, адрес страницы имеет вид: http://www.site.ru/dir/index.php?IBLOCK_ID=1&SECTION_ID=111
, тогда для настройки 301 переадресации на новый адрес, необходимо использовать следующее правило:
RewriteCond %{QUERY_STRING} ^IBLOCK_ID=1&SECTION_ID=111$ [NC] RewriteRule ^dir/index.php$ /new/sef/? [R=301,L]
Если один (или несколько) из GET параметров не задан(ы) или может иметь произвольное значение (в нашем примере это SECTION_ID
), можно использовать следующий код:
RewriteCond %{QUERY_STRING} ^IBLOCK_ID=1&SECTION_ID=(.*)$ [NC] RewriteRule ^dir/index.php$ /new/sef/? [R=301,L]
Если требуется настроить переадресацию только для адреса http://www.site.ru/dir/
, но при этом чтобы страница http://www.site.ru/dir/index.php?IBLOCK_ID=1
открывалась по старому адресу, необходимо использовать спецсимвол $
в правиле.
RewriteRule ^dir/$ http://www.site.ru/new-dir/ [R=301,L]
Для доменов в зоне РФ действуют все те же правила, но только все кириллические символы необходимо заменить на альтернативный код (он на латинице). В частности, сама зона .рф
преобразуется в .xn--p1ai
.
RewriteCond %{HTTP_HOST} ^old-site.ru$ [NC] RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
И для домена в зоне РФ:
RewriteCond %{HTTP_HOST} ^xn-....xn--p1ai$ [NC] RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !..{1,10}$ RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*)$ http://www.site.ru/$1/ [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} ^(.+)/$ RewriteRule ^(.+)/$ http://www.site.ru/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^si-te.ru$ [NC] RewriteRule ^(.*)$ http://www.site.ru/si-te/ [R=301,L]
RewriteRule ^bitrix/ /bitrix/admin/ [L,R=301] RewriteRule ^(.*)$ http://www.newsite.ru/new/ [L,R=301]
RewriteRule ^dir(.*)$ /new-file.php [L,R=301]
RewriteRule ^dir/no-file.html /no-file-new.html [L,R=301] RewriteRule ^dir(.*)$ /all.php [L,R=301]
RedirectMatch 301 (.*).html$ http://www.new-site.ru$1.php
Указывается порядок загрузки типов индексного файла, лежащих в корне каталога.
DirectoryIndex index.html index.php index.htm index.shtml
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.php HTTP/ RewriteRule ^index.php$ http://www.site.ru/ [R=301,L]
RewriteCond %{HTTP_HOST} ^test.site.ru$ [NC] RewriteRule ^(.*)$ http://site.ru%{REQUEST_URI} [R=301,NC,L,QSA]
RewriteRule [^abc]/unique-file.html /unique-file.html [R=301,L]
Код позволяет поставить 301-редирект со всех папок вида http://site.ruuniqe-file.html
на один файл в корне /unique-file.html
. Бывает полезен при переделке сайта и изменении ссылок.
RewriteRule ^testovyi/test/?$ /studio/news/detail.php?ID=230354&PAGEN_2=11 [NC,L]
Код позволяет создать копию страницы с относительным адресом /studio/news/detail.php?ID=230354&PAGEN_2=11
по адресу /testovyi/test/
Внимание, важно, чтобы код ответа сервера для 404 ошибки, был именно 404. Путь к файлу указывается с помощью следующей строчки:
ErrorDocument 404 /404-for-me.php
RewriteCond %{HTTP_HOST} ^([a-z0-9_-]+).site.com$ RewriteRule ^(.*) http://site.com/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^([a-z0-9_-]+).site.com$ RewriteCond %{HTTP_HOST} !=one.site.com [NC] RewriteRule ^(.*) http://site.com/$1 [R=301,L]
-
Если требуется настроить редирект только для некоторых USER_AGENT’ов, а не для всех пользователей #
RewriteCond %{HTTP_USER_AGENT} (iPad|ipad|iphone|iPhone|ipod|iPod|android|midp|j2me|symbian|series 60|symbos|windows mobile|windows ce|ppc|smartphone|blackberry|mtk|bada|windows phone) [NC]RewriteRule (.*) http://mobile.site.ru/ [L,R=301]
RewriteCond %{HTTP_USER_AGENT} !(accoona|ia_archiver|antabot|ask jeeves|baidu|dcpbot |eltaindexer|feedfetcher|gamespy|gigabot|googlebot |gsa-crawler|grub-client|gulper|slurp|mihalism|msnbot|worldindexer |ooyyo|pagebull|scooter|w3c_validator|jigsaw|webalta|yahoofeedseeker |yahoo! slurp|mmcrawler|yandexbot|yandeximages |yandexvideo|yandexmedia|yandexblogs|yandexaddurl|yandexfavicons |yandexdirect|yandexmetrika|yandexcatalog|yandexnews |yandeximageresizer) [NC]RewriteRule (.*) http://no-search.site.ru/ [L,R=301]
Переадресация с www.site.ru/component/content/?view=featured
на www.site.ru/
RewriteCond %{QUERY_STRING} ^view=featured$ [NC] RewriteRule ^component/content/?$ /? [R=301,L]
Переадресация с www.site.ru/index.php?idc=4&marea=6
на www.site.ru/
RewriteCond %{QUERY_STRING} ^idc=4&marea=6$ [NC] RewriteRule ^index.php$ /? [R=301,L]
. — Точка заменяет произвольный символ. [abc] — обозначает перечень символов, совпадающих с буквами a, b, или с. [^abc] — перечень символов, которые не входят в указанных диапазон. Совпадёт с любым символом, кроме a, b, или с. * — означает, что предшествующий символ может повторяться (0 или более раз). [abc]* — команда найдёт идущие подряд символы из заданного набора. [^abc]* — с точностью до наоборот. .* — заменяет абсолютно любой набор символов. ".*" — найдёт все подстроки между кавычками. ^ — начало строки (в том случае, если используется в начале выражения). $ — обозначает конец строки. w — буква, цифра или подчёркивание _. d — заменяет любую цифру. D — заменяет любой символ, но не цифру. [0-9] — заменяет любую цифру. [a-z] — любая буква от a до z (весь латинский набор символов) в нижнем регистре. [A-Z] — любая буква от A до Z в ВЕРХНЕМ регистре. [a-zA-Z] — любая буква от a до Z в любом регистре. [a-Z] — то же самое.
RewriteRule (.*) $1? [R=301,L]
Располагать после: RewriteBase /
Памятка по используемым символам и обозначениям
Строчка RewriteCond
— условие выполнения правила RewriteRule
. Если условие выполняется, то срабатывает редирект. Правила могут задаваться с помощью регулярных выражений.
Спецсимволы, используемые в правилах и их значения.
^ — спецсимвол начала строки;
$ — спецсимвол конца строки;
! — спецсимвол отрицания;
. — точка, заменяет любой символ, но только один;
() — группировка;
— «экранирующий» слеш, следующий символ после него считается обычным, а не спецсимволом.
Модификаторы используются после обычных, спецсимволов или их групп и позволяют расширить возможности шаблонов для срабатывания правил.
? — символ повторяется 0 или 1 раз.
+ — повторяется от 1 до 65536 раз.
* — повторяется от 0 до 65536 раз.
Флаги, задают доп. опции для используемого правила. Перечисляются в квадратных скобках через запятую, скажем [NC] или [R=301,L].
NC — флаг NoCase, отключающий проверку регистра символов при срабатывании правила.
R — флаг Redirect, производит процесс остановки изменения URL-адреса и возвращает результат. Чаще всего используется значение R=301, но возможны и другие для временных перенаправлений (302, MOVED TEMPORARY).
L — флаг Last, останавливает формирования URL-адреса и строка считается окончательной.
⇥ Полезные ссылки:
- Redirect 301 – теория и практика редиректа, настройка и правила использования
UPD:
RewriteCond %{SERVER_PORT} !^443$ RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
обратно:
RewriteCond %{SERVER_PORT} ^443$ [OR] RewriteCond %{HTTPS} =on RewriteRule ^(.*)$ http://your_site.com/$1 [R=301,L]
⇥ Для WordPress:
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] RewriteCond %{SERVER_PORT} !^443$ RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L] </IfModule> # END WordPress
Источник
coderhs.com
Полезные советы
- Современные браузеры по умолчанию используют кеширование для редиректов. Чтобы проверить работу редиректа необходимо очистить кеш в браузере или использовать любой сторонний сервис по проверке кода ответа сервера.
- Нежелательно создавать цепочки редиректов. При медленной работе сервера это вызовет недовольство пользователя. Поисковые роботы также не любят последовательные редиректы — вес исходной страницы может не передаться.
- При составлении файла .htaccess простые директивы должны идти раньше сложных, которые распространяются на весь сайт. Такая компоновка будет более удобной при работе с файлом и поможет избежать путаницы.
Наиболее популярные правила
Приведенные примеры работают для серверов функционирующих на APACHE, для NGINX настройки в файле .htaccess работать не будут. В примерах используется %{QUERY} — так обозначается часть URL, которая следует после знака вопроса. Правила для редиректа срабатывают только при условии соответствия правилу указанному в редиректе.
При настройке правила редиректов в файле .htaccess все правила необходимо указывать после указанных двух строк, либо просто добавьте их:
Options +FollowSymLinks
RewriteEngine On
301 редирект все страниц без WWW на страницы с WWW
RewriteCond %{HTTP_HOST} ^mysite.ru$ [NC]
RewriteRule ^(.*)$ http://www.mysite.ru/$1 [R=301,L]
Обратный редирект со страниц с WWW на страницы без WWW
RewriteCond %{HTTP_HOST} ^www.mysite.ru$ [NC]
RewriteRule ^(.*)$ http://mysite.ru/$1 [R=301,L]
301 редирект с одной страницы на другую
Redirect 301 /oldpage.html http://mysite.ru/newpage.html
Переадресация для разделов через RewriteRule
RewriteRule ^papka /papka-new/$1 [R=301,L]
301 редирект для страниц имеющих Get-параметры в URL
Для наглядности примера допустим адрес страницы имеет вид http://mysite.ru/catalog/index.php?IBLOCK_ID=5&SECTION_ID=15. Следующее правило будет делать переадресацию:
RewriteCond %{QUERY} ^IBLOCK_ID=5&SECTION_ID=15$ [NC]
RewriteRule ^catalog/index.php$ /newcatalog/? [R=301,L]
Иногда необходимо настроить редирект для изменяющихся Get-параметров, например в текущем примере динамическим параметром будет SECTION_ID:
RewriteCond %{QUERY} ^IBLOCK_ID=5&SECTION_ID=(.*)$ [NC]
RewriteRule ^catalog/index.php$ /newcatalog/? [R=301,L]
Переадресация со страниц без значения Get-параметра
Например адрес страницы имеет вид — http://mysite.ru/?addon, тогда редирект будет следующим:
RewriteCond %{QUERY} ^addon$ [NC]
RewriteRule ^$ /? [R=301,L]
Переадресация одного адреса, без вложенных адресов
Например довольно часто необходимо настроить переадресацию со страницы раздела http:/site.ru/razdel/, однако прочие страницы в данном разделе должны работать без редиректа, например страница http://mysite.ru/razdel/section.php?SECTION_ID=1. Для этого нужно добавить всего один символ — $.
RewriteRule ^razdel/$ http://mysite.ru/new-razdel/ [R=301,L]
Настройка кириллических доменов .РФ
Правила и логика работы с доменами на кириллице абсолютно такие же, единственным отличием является замена символов кириллицы на специальный код.
301 редирект с одного домена на другой
RewriteCond %{HTTP_HOST} ^oldmysite.ru$ [NC]
RewriteRule ^(.*)$ http://newmysite.ru/$1 [R=301,L]
Правило для доменов .РФ
RewriteCond %{HTTP_HOST} ^xn-....xn--p1ai$ [NC] RewriteRule ^(.*)$ http://mysite.ru/$1 [R=301,L]
Редирект на папки со слешем на конце
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !..{1,10}$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://mysite.ru/$1/ [L,R=301]
Редирект на папку без слеша — убираем слеш на конце
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ http://www.site.ru/$1 [R=301,L]
Переадресация с домена в папку другого сайта
RewriteCond %{HTTP_HOST} ^oldsite.ru$ [NC]
RewriteRule ^(.*)$ http://newsite.ru/oldsite/ [R=301,L]
Редирект со всех страниц кроме определенной папки
Для примера возьмем в исключение папку панели администратора в CMS Bitrix
RewriteRule ^bitrix/ /bitrix/admin/ [L,R=301]
RewriteRule ^(.*)$ http://mysite.ru/ [L,R=301]
Переадресация всех файлов папки на конкретный файл
RewriteRule ^papka(.*)$ /my-file.html [L,R=301]
Переадресация файлов папки на другой файл с исключением
RewriteRule ^papka/file.html /new-file.html [L,R=301]
RewriteRule ^papka(.*)$ /my-file.html [L,R=301]
Редирект замены расширений файлов — с html на php
RedirectMatch 301 (.*).html$ http://newsite.ru$1.php
Указываем порядок загрузки индексных файлов в корне
DirectoryIndex index.php index.html index.htm index.shtml
Редирект с index.php на корень сайта
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.php HTTP/ RewriteRule ^index.php$ http://mysite.ru/ [R=301,L]
Редирект всех индексных страниц на корень
RewriteRule ^(.*)index.php$ http://mysite.ru/$1 [R=301,L]
Переадресация с поддомена на основной домен
RewriteCond %{HTTP_HOST} ^abc.mysite.ru$ [NC]
RewriteRule ^(.*)$ http://mysite.ru%{REQUEST_URI} [R=301,NC,L,QSA]
Редирект страницы из различных директорий
Если в разных папках сайта лежит файл с одинаковым названием, то настроить переадресацию этих файлов на один.
RewriteRule [^abc]/nash-file.php /nash-file.php [R=301,L]
Создаем ЧПУ-копию динамических страниц
Для страницы появится обычный URL без передачи Get-параметров.
RewriteRule ^catalog/okno/?$ /firma/okna/detail.php?ID=123 [NC,L]
Переадресация с https на http
Необходимое правило для решения проблемы с дублями страниц в поисковых системах.
RewriteCond %{HTTPS} "on" RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,QSA]
Настройка ответа 403 для спама по REFERER
Данное правило позволяет не пускать на сайт спамный трафик с других сайтов:
RewriteCond %{HTTP_REFERER} ref-spam-site.ru [NC,OR]
RewriteCond %{HTTP_REFERER} another-ref-spam.ru [NC]
RewriteRule .* - [F]
Обработка ошибки 404 в .htaccess
Для поисковых систем очень важно получать код ответа 404 для несуществующих страниц
ErrorDocument 404 /404-for-me.php
Особенности настройки
Следует помнить, что все правила выполняются в .htaccess в порядке следования их в файле, поэтому необходимо следить за очередностью правил.
Избегайте цепочек редиректов, когда от старой до новой страницы осуществляется посещение еще одной страницы. Цепочки переадресаций негативно влияют на доверие пользователей и поисковых систем.
Включение редиректа для определенных User Agent
Например редирект на мобильную версию для планшетов и смартфонов:
RewriteCond %{HTTP_USER_AGENT} (iPad|ipad|iphone|iPhone|ipod|iPod|android|midp|j2me|symbian|series 60|symbos|windows mobile|windows ce|ppc|smartphone|blackberry|mtk|bada|windows phone) [NC]
RewriteRule (.*) http://m.mysite.ru/ [L,R=301]
Настройка редиректов для всех поисковых роботов
RewriteCond %{HTTP_USER_AGENT} !(accoona|ia_archiver|antabot|ask jeeves|baidu|dcpbot |eltaindexer|feedfetcher|gamespy|gigabot|googlebot |gsa-crawler|grub-client|gulper|slurp|mihalism|msnbot|worldindexer |ooyyo|pagebull|scooter|w3c_validator|jigsaw|webalta|yahoofeedseeker |yahoo! slurp|mmcrawler|yandexbot|yandeximages |yandexvideo|yandexmedia|yandexblogs|yandexaddurl|yandexfavicons |yandexdirect|yandexmetrika|yandexcatalog|yandexnews |yandeximageresizer) [NC]
RewriteRule (.*) http://no-rank-site.ru/ [L,R=301]
Синтаксис и символы
- . — Точка означает любой символ.
- [abc] — перечень символов, совпадающих с буквами a, b, или с.
- [^abc] — перечень символов, не входящих в диапазон. Условию соответствует любой символ, кроме a, b, с.
- * — предыдущий символ может повторяться 0 и более раз.
- [abc]* — найти символы из заданного набора идущие подряд.
- [^abc]* — обратная операция.
- .* — замена любого набора символов. «.*» — найти все подстроки между кавычками.
- ^ — обознает начало строки (при использовании в начале выражения).
- $ — конец строки.
- w — буква, цифра или подчёркивание _.
- d — любая цифра.
- D — любой символ, кроме цифр.
- [0-9] — указание на любую цифру.
- [a-z] — указание на любую букву от a до z с нижним регистром.
- [A-Z] — указание на любую букву от A до Z с верхним регистром.
- [a-zA-Z] — любая буква от a до Z, регистр не важен.
- [a-Z] — тоже самое, только короче.
Флаги для доп. опций
- NC — NoCase отключает проверку регистра символов при срабатывании правила.
- R — Redirect останавливает изменение URL-адреса и возвращает результат. Самое популярное значение R=301, однако встречаются и другие для временных редиректов (302, MOVED TEMPORARY).
- L — Last останавливает создание URL-адреса и строка считается окончательной.
canwas.ru
Виды редиректов через файл htaccess
Откройте файл htaccess (для сервера Apache), который располагается в корне вашего сайта (если такого файла нет, то создайте его).

В этом файле и будут проводится все дальнейшие настройки для правильной переадресации страниц и доменов сайта.
Для начала, давайте рассмотрим процесс указания главного зеркала сайта с приставкой www и без нее.
Перенаправление домена с www на без-www
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.domain.com$ [NC]
RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L]
Перенаправление домена без приставки www на www
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
Манипуляции со слешем в конце урла
Очень часто возникают ситуации, когда одна и та же страница на сайте, доступна по таким адресам:
http://site.ru/catalog/page
и
http://site.ru/catalog/page/
разница лишь в том, что в первом случае в конце нет слеша (косой линии), а во втором он присутствует. Это одна из самых грубых ошибок, ведь в таком случаи для каждой страницы будет создаваться дубль, и поисковые системы, будут считать эти адреса абсолютно разными, но с одинаковым содержимым.
Чтобы исключить такой вариант, и оставить урлы страниц без слеша в конце, вставьте вот такой код в файл htaccess:
RewriteCond %{HTTP_HOST} (.*)
RewriteCond %{REQUEST_URI} /$ [NC]
RewriteRule ^(.*)(/)$ $1 [L,R=301]
если вы хотите, чтобы слеш присутствовал в конце каждого урла используйте такой код:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [L,R=301]
Отдельное перенаправление для дублей главной страницы
Бывают моменты, что главная страница вашего сайта, доступна по нескольким адресам – index.php, home.php, default.php и т.д. (окончание может быть и другое – html, htm и т.д.), что также создает дополнительные дубли, но только для главной страницы.
Для исправления этой ошибки, вставьте в уже известный вам файл, такой код:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /([^/]+/)*(default|index|main).(html|php|htm) HTTP/ [NC]
RewriteRule ^(([^/]+/)*)(default|main|index).(html|php|htm)$ http://www.site.com/$1 [L,R=301]
301 редирект для переадресации страниц старого домена на новый
Redirect 301 / http://www.newsite.com/
В случаи применения этого правила все страницы старого сайта будут перенаправлены на новый домен.
Для переадресации конкретной страницы старого сайта на страницу нового сайта вставьте в файл .htaccess следующий код:
Redirect 301 /oldsite/page.html http://www.newsite.com/page2.html
Также можно воспользоваться альтернативным вариантом перенаправления всех страниц старого сайта на новый:
RedirectPermanent / http://www.newsite.com/
А вот код для перенаправления со старого каталога в новый:
RedirectPermanent /old-catalog http://www.newsite.com/new-catalog/
Перенаправление старого домена на новый:
RewriteEngine on
RewriteRule (.*) http://www.newdomain.com/$1 [R=301,L]
Есть случаи, когда необходимо, чтобы страница типа test.htm перенаправлялась на страницу test.html. Это решается вот таким кодом:
RewriteEngine on
RewriteBase /
RewriteRule ^test.htm$ test.html [R=permanent]
Если необходимо заменить все расширения на сайте, тогда редирект htaccess будет таким:
RewriteEngine on
RewriteBase /
RewriteRule ^(.*).htm$ $1.html [R=permanent]
Я привел лишь самые распространенные способы перенаправлений, которых для решения стандартных задач будет вполне достаточно. Если же вам нужно решить другие задачи, связанные с редиректом (помимо тех, что я описал в статье), советую обращаться к профессионалам, ведь привести сайт в нерабочее состояние, неправильными настройками в файле htaccess очень просто.
Хотя в принципе, базовые правила просты в понимании, и можно пробовать настраивать 301 редирект через htaccess под свои цели (если они не слишком сложные).
Поэтому всегда, после внесения изменений в этот файл, проверьте работу сайта – все ли открывается так как вам нужно, ничего не виснет, страницы и разделы сайта работают в нормальном режиме.
Проверку можно осуществить здесь. Интересуемая вас страница должна отдавать 301 ответ сервера.

Вот пример переадресации на моем блоге — к любому адресу размещенной статьи пропишите приставку feed/, после перехода вас попросту перекинет на тот же адрес. Таким образом, я борюсь с дублями страниц на блоге.
Сервисы генерации базовых редиректов:
http://www.webconfs.com/htaccess-redirect-generator.php
http://www.rapidtables.com/web/tools/redirect-generator.htm
Вот и все, о чем я хотел рассказать вам в сегодняшней статье. Если остались вопросы, обязательно задавайте их.
На этом все, всем пока!
www.seofive.ru
Памятка по используемым символам и обозначениям
Строчка RewriteCond — условие выполнения правила RewriteRule. Если условие выполняется, то срабатывает редирект. Правила могут задаваться с помощью регулярных выражений.
Спецсимволы, используемые в правилах и их значения.
- ^ — спецсимвол начала строки;
- $ — спецсимвол конца строки;
- ! — спецсимвол отрицания;
- . — точка, заменяет любой символ, но только один;
- () — группировка;
- — «экранирующий» слеш, следующий символ после него считается обычным, а не спецсимволом;
- # — начало текстового комментария в файле.
Модификаторы используются после обычных, спецсимволов или их групп и позволяют расширить возможности шаблонов для срабатывания правил.
- ? — символ повторяется 0 или 1 раз.
- + — повторяется от 1 до 65536 раз.
- * — повторяется от 0 до 65536 раз.
Флаги, задают доп. опции для используемого правила. Перечисляются в квадратных скобках через запятую, скажем [NC] или [R=301,L].
- NC — флаг NoCase, отключающий проверку регистра символов при срабатывании правила.
- R — флаг Redirect, производит процесс остановки изменения URL-адреса и возвращает результат. Чаще всего используется значение R=301, но возможны и другие для временных перенаправлений (302, MOVED TEMPORARY).
- L — флаг Last, останавливает формирования URL-адреса и строка считается окончательной.
pixelplus.ru
Редирект .htaccess: постоянное перенаправление, 301
Подобная штука имеет разные названия. Непонятки может вызвать разве что число — почему же 301? Суть кроется в самом протоколе HTTP, который на запросы клиента отвечает определённым кодом состояния. Код 404 Not Found (Страница не найдена) известен почти всем. Код 200 OK почти не известен, но именно он означает, что всё в порядке и документ будет показан в браузере. А вот код 301 Moved Permanently означает, что документ окончательно перебрался на новый адрес. Именно его и называют чаще всего перенаправлением, хотя общий пул ответов обозначен как — 3xx: Redirection.
В общем случае, для безусловного внешнего (назовём его пользовательским) редиректа, при котором браузер автоматически переадресовывается на другую страницу, обычно незаметно для пользователя (изменяется адресная строка), можно в .htaccess поместить такой код:
RewriteEngine On
RewriteRule .* http://newsite.ru/ [L,R=permanent]
Здесь, первая строка включает механизм модуля mod_rewrite, который позволяется вытворять с адресами всё, что угодно. Назовём это преобразованием URL по условиям на лету. Вторая строка определяет непосредственно правило для преобразования, в примере выше все запросы редиректятся на http://newsite.ru/. В квадратных скобках размещаются флаги: L — последнее (Last) правило, R — тип перенаправления (Redirect), указывается в виде R=code, где code — буквенное или числовое обозначение (permanent или 302).
Этот способ хорош, когда вам неважно, на какую страницу нового сайта ссылаться. Но если вы переехали на другой домен, то желательно делать редиректы всех запросов с сохранением адресов. Для этого используйте такой код:
RewriteRule ^.*$ http://newsite.ru/$0 [QSA,L,R=permanent]
Новый флаг QSA сохранит так же и параметры, которые можно встретить в адресах после знака вопроса. В уже знакомом примере:
https://a-panov.ru/?p=389
если я размещу в .htaccess код выше, то произойдёт перенаправление на адрес http://newsite.ru/?p=389 чего без данного флага не было бы.
Как настроить редирект на www (или без www)
Подобные перенаправления требуются для случаев, когда сайт доступен по вариантам nsite.ru и www.nsite.ru, в этом случае поисковики считают их дублями и могут либо самостоятельно выбрать один из вариантов в качестве главного зеркала, либо в поиске будут варианты с обоих доменов. В общем случае, это отрицательный фактор при ранжировании сайта.
Вариант попроще, для одного домена. Перенаправление производится с поддомена www.site.ru на site.ru:
RewriteCond %{HTTP_HOST} ^www.nsite.ru$
RewriteRule .* http://nsite.ru/$0 [QSA,L,R=permanent]
Здесь появилась новая директива RewriteCond, которая задаёт условие, при котором должны срабатывать редиректы — правила RewriteRule. Условие, в данном случае, имя домена, соответствующее www.nsite.ru (в регулярных выражения символ точки означает «любой символ», поэтому его желательно экранировать с помощью обратного слеша).
Обратное перенаправление тоже выполнить очень просто:
RewriteCond %{HTTP_HOST} ^nsite.ru$
RewriteRule .* http://www.nsite.ru/$0 [QSA,L,R=permanent]
Оба варианта рабочие, но у них есть маленький минус — для каждого нового конфига необходимо заменять домен nsite.ru на свой собственный. Нельзя ли сделать уникальный вариант? Легко!
Редирект с любого поддомена www:
RewriteCond %{HTTP_HOST} ^www.(.*)$
RewriteRule .* http://%1/$0 [QSA,L,R=permanent]
Редирект на поддомен с www:
RewriteCond %{HTTP_HOST} !^www.
RewriteRule .* http://www.%{HTTP_HOST}/$0 [QSA,L,R=permanent]
Как создать .htaccess
Такие вопросы тоже возникают. Проблема в том, что стандартный Проводник (приложение в Windows, отвечающее за графический интерфейс) не позволяет создавать файлы, начинающиеся с точки (созданием файлов или папкок осуществляется щелчком правой кнопкой на рабочем столе или в окне, и выбора нужного действия из списка Создать). Но выход есть: открывайте стандартный рекдатор Notepad (блокнот), в меню выбираете Файл → Сохранить как…, и в качестве имени сохраняемого файла указываете .htaccess — после этого он будет создан.
Файл .htaccess не работает
Бывают случаи, когда директивы из файла не работают. Обычно это вызвано тем, что в конфигурации Apache отключена поддержка .htaccess, за что отвечает директива:
AllowOverride none
Обычно это делается, чтобы несколько увеличить быстродействие — в этом случае веб-сервер не производит поиск и разбор .htaccess.
Возможен и такой вариант, что на сервере не используется Apache, например, IIS — основной «гость» на Windows-хостинге. Для уточнения свяжитесь с поддержкой своего хостера.
Есть ли какой-нибудь аналог .htaccess в nginx?
Ещё один довольно частый вопрос. В этом веб-сервера такой возможности нет. Однако, подобное обычно и не требуется. Дело в том, что nginx, как правило, устанавливается в качестве фронденда, т. е. принимает и обрабатывает все запросы, которые либо выполняет сам, либо перенаправляет на бэкенд, роль которого может выполнять Apache, который можно дополнительно конфигурировать с помощью .htaccess.
a-panov.ru
Всем привет! Сегодня на SEO-Mayak.com довольна сложная и интересная тема. Многие, почти все начинающие блогеры даже понятия не имеют, что такое 301 редирект. Я как-то уже касался этой темы в статье про дубли контента и теперь мы рассмотрим ее поподробней.
Что такое 301 редирект? Это специальный код, который возвращает сервер при обращении к определенному URL.
Что это значит? Это значит, что если вы набрали в адресной строке браузера определенный URL, то Вас перенаправят на новый адрес.
Для чего это все нужно? Возьмем пример из реальной жизни. Заходите вы по определенному адресу, а вам говорят — «А здесь теперь такие не живут! Они совсем своим имуществом переехали на другую улицу и вот Вам их новый адрес…» Согласитесь полезная информация? Я не зря сказал — «…со все своим имуществом» т.е они не чего не оставили на старом адресе. Это важно!
Если Ваш проект по какой-то причине переехал на новый адрес, то как раз 301 редирект подскажет поисковому роботу где Вас искать, причем Ваш сайт не потеряет вес и другие показатели при переезде.
Прописываем 301 редирект в файле .htaccess
Чтобы выполнить сие действие надо в файле .htaccess прописать следующее:
Где «/» означает, что все начиная с «головы» сайта включая все подкаталоги будет переадресовано на новый адрес.
Не забудьте сделать резервную копию сайта если вдруг что-то пойдет не так!
Теперь рассмотрим другую ситуацию. У меня есть 2 квартиры, а живу я лишь в одной. Ко мне приходят письма по другому адресу, звонит телефон, заходят разные люди и т.д. А я забыл повесить объявления, что нахожусь я вообще в другом месте. Забавная история! Получается я теряю собственные авторитет в глазах окружающих из-за своей забывчивости.
Из этого вывод. Надо непременно указать поисковому роботу точный адрес проекта, например: www.сайт.com или просто сайт.com потому, что это два разных адреса.
Как это осуществить смотрите на этом примере:
Перенаправление с www на без www
Перенаправление с без www на с www
Надо заметить, что если в файле .htaccess уже прописана строчка RewriteEngine On, то ее повторять уже не надо и не забудьте вписать свой домен.
Существует мнение, что с защищенного протокола https:// также надо перенапралять пользователей на основной протокол http:// Я даже обратился в службу поддержки своего хостинг провайдера с этим вопросом. На что мне ответили, что возможность перенаправления есть и для этого в файле .htaccess необходимо прописать следующее:
Бывает такие случаи, что необходимо перенести только одну страницу при этом сохранить ее вес. Для этого в файле .htaccess прописываем:
В этой статье я постарался описать самые распространенные случаи использования 301 редиректа, которые необходимо знать каждому веб-мастеру. На самом деле возможности 301 редиректа на этом не ограничиваются и в будущем я еще не раз буду возвращаться к этой теме, так что советую подписаться на обновления блога.
На сегодня у меня все. Как вам статья?
Все мы когда-то были детьми:
С уважением, Виталий Кириллов
seo-mayak.com