Оптимизация сайта через .htaccess

Что же такое файл .htaccess и mod_rewrite?

Что же такое файл .htaccess и mod_rewrite?

.htaccess – файл-конфигуратор Apache-серверов. А Mod_rewrite – модуль, используемый веб-серверами для преобразования URL’ов, это мощный инструмент основанный на правилах основой которых является — механизм динамического изменения запрашиваемых URL-ов.

Для пользователей, которые не до конца знакомы с .htaccess, можно дать следующее объяснение данному конфигуратору: это простой текстовый документ, с расширением htaccess. Данный файл обычно находится в корне сайта, однако Вы можете создавать и дополнительные .htaccess-файлы для различных директорий Вашего сайта.

Предназначен .htaccess-файл для внесения изменений в конфигурации веб-сервера, то есть каждый пользователь может подстраивать его под нужды своего собственного сайта.

Самым простым и известным методом работы с данным файлом является настройка редиректов, а также переназначения типов файлов или управления доступом к каталогам.

Редирект — перенаправление пользователя с одной страницы сайта на другую (с одного URL на другой). Редиректы могут перенаправлять посетителей как на внутренние страницы, так и на страницы другого сайта.

Однако это далеко не все возможности .htaccess. В данной статье мы раскроем множество возможностей .htaccess, о которых вы могли не знать.

Для того, чтобы начать узнавать как же оптимизатор или вебмастер может использовать файл .htaccess. необходимо ознакомиться с основами взаимодействия с данным типом файла. Итак, все управление конфигурациями сервера происходит с помощью директив. Директивы – это небольшие команды, имеющие вид «ключ-> значение».

Фундаментальные директивы для управления сервером прописаны в главном файле конфигурации – httpd.conf.

Httpd.conf позволяет настроить функционирование сервера. После изменения данного файла в соответствии с вашими требованиями, можете запускать сервер.

Доступ к httpd.conf для обычных пользователей закрыт, а .htaccess дает возможность изменять некоторые директивы из httpd.conf. Действие директив .htaccess распространяется на весь каталог, в котором он находится. Поэтому, если разместить его в корневом каталоге, он будет распространяться на весь сайт, это очень удобно для вебмастеров которые хотят вносить изменения в функционирование сайта без привлечения системных администраторов. Если файл находится в папке каталога — директивы распространяются только на этот каталог и вложенные в него подкаталоги. Для каталога и подкаталогов приоритетными являются команды, прописанные в .htaccess, который находится в директории каталога.

Основные операторы для работы с .htaccess:

. — любой символ
$ — ограничение справа
^ — ограничение слева
0 и более символов
+ — 1 и более символов
[] — диапазон значений<
\ — экранирование
() — переменная
* — ставится после символа (группы), который может отсутствовать или присутствовать неограниченное число раз подряд.
[0-9] — заменяет любую цифру, [a-z] — любую букву из латинского алфавита;
Все, что расположено после символа ‘#’, считается комментарием.

Это все основные примитивы, с помощью которых можно построить любое регулярное выражение, основываясь на операторах htaccess.

Базовая настройка для файла .htaccess

Копируйте этот код себе, заменяйте primer на свой и сохраняйте в коде файла конфигураций.

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^primer\.ru$ [NC]
RewriteRule ^(.*)$ http://primer.ru/$1 [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTPRewriteRule ^index\.php$ http://as-pushkin.ru/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ /$1 [R=301,L]

Правила использования волшебного файла .htaccess

  1. Не вносите изменения и не начинайте работу в .htaccess, без предварительного создания резервной копии. Это позволит, при необходимости, вернуть изначальные настройки.
  2. Путь к файлам указывается от корня: AuthUserFile /passwords/.psd
  3. Домены прописываются с указанием протокола: Redirect 301 http://primer.ru
  4. Не забывайте про точку перед названием файла .htaccess (файловое расширение).
  5. Комментарии прописываются с помощью символа # (например, использовать их чтобы другие оптимизаторы или разработчики понимали, для чего прописана та или иная директива).

.htaccess для seo: стандартные способы применения

Следует помнить, что недостаточно настроить лишь .htaccess, и на этом закончить оптимизацию собственного ресурса. Данный файл лишь помощник, так сказать, инструмент в руках оптимизатора. А для полноценной технической работы сайта необходимо реализовать полный технический аудит.

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

Выбор главного зеркала

Перед тем как заниматься продвижением сайта, необходимо определиться, какой именно адрес вы будете оптимизировать. То есть. с WWW (http://www.primer.ru) или без WWW (http://primer.ru). Без данного пункта поисковые системы могут самостоятельно определить главное зеркало сайта, а значит у Вас появятся дубли страниц в индексе.

Главное зеркало сайта — это указанное как основное полное доменное имя сайта. Оно считается главным, поскольку в отличие от остальных, участвует в результатах выдачи поиска.

Кто не уверен в правильности настройке собственного зеркала или еще не настраивал советуем начать с алгоритма следующих действий:

  • Переходим в поисковую систему Яндекс;
  • Вводим адрес нашего сайта;
  • Анализируем выдачу, на предмет присвоения зеркала сайта.

Пример результатов анализа поисковой выдачи:

Результат нижней строки отображаемый в браузере — это главное зеркало сайта которое Яндекс присвоил вашему сайту по умолчанию.

То есть пример нам показывает, что сайт из примера открывается по адресу http://www.primer.ru

Параллельно с этим для поисковика Google сайт открывается по адресу http://primer.ru

Проблема заключается в том, что у сайта имеется 2 дубля (для главной страницы из указанного примера). Это первостепенно является свидетельством дублирования контента. Но дубли же имеет не только главные страницы, а и все вложенные в структуру категории и подкатегории (url-страницы сайта), если ваш проект многостраничный, то такое дублирование окажет также влияние на скорость индексации проекта. Добавим сюда возможный факт, что естественные ссылки будут размещаться по разному, что снизит их эффективность. Вывод один — избавляемся от неглавного зеркала используя редирект в файле .htaccess.

Итак, переходим к самой простой работе с .htaccess:

  • определите как вы хотите чтобы пользователи и поисковые системы видели ваш проект, что бы открывался с WWW. или без WWW.

Мнение SEO-специалиста (совет от практикующего интернет-маркетолога, оптимизирующего сайты под поисковые машины)

“Выбирая для продвижения сайта домен с WWW или без него, необходимо помнить, что ни один из предложенных вариантов написания доменного имени не дает в SEO приоритетов! Многие полагают, что домен без WWW для ботов поисковиков является доменом второго уровня, и это якобы лучше сказывается на SEO. На самом деле, несмотря на то, что домен с WWW является третьим уровнем, это на SEO оптимизации сайта никак не отразится.То есть , вебмастер или владелец сайта, может выбрать основной домен по своему желанию. Единственный негласный плюс – домен без WWW короче из-за отсутствия 3 символов. Лучше для сайта с историей, тот который уже оптимизировался при помощи внешнего продвижения (закупка ссылочной массы), выбирать на основе ссылочной массы, каких ссылок больше, то и определять главным зеркалом! Ссылки на сайт, можно посмотреть в любом доступном сервисе. “

  • не забудьте использовать не только .htaccess, но и соответствующие вебмастера для разных поисковиков. Именно с их помощью можно указать главное зеркало. Для этого нам понадобятся Инструменты для вебмастера от Яндекса (webmaster.yandex.ru) и от Google (google.com/webmasters).

Для того, чтобы задать главное зеркало сайта в Яндексе, в правой колонке выбираем Настройка индексирования >>>>> Главное зеркало

В кабинете вебмастера Гугла, назначить главное зеркало немного сложнее. Для начала, вам придется добавить два ресурса, например, primer.ru и www.primer.ru.

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

После того как вы подтвердили оба варианта домена, вы нажимаете в нижнем левом углу на значок шестеренка (настройки), и выбираете пункт «Настройки сайта». При этом не важно какое зеркало будет в данный момент отображаться в аккаунте – с www или без него.

В открывшемся поле выбираете нужный вариант зеркала, и сохраняете его. Все — в инструментах вебмастера обоих поисковых систем вы настроили свое главное зеркало.

И теперь вам осталось настроить 301-й редирект и файл Robots.txt (HOST), чтобы окончательно показать поисковикам главное зеркало вашего сайта.

Редирект на без WWW

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.primer\.ru$ [NC]
RewriteRule ^(.*)$ http://primer.ru/$1 [R=301,L]

Редирект с www

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^primer\.ru$ [NC]
RewriteRule ^(.*)$ http://www.primer.ru/$1 [R=301,L]

*Выделенные домены, во всех примерах в статье необходимо заменить на свой адрес! 

Для использования необходимо удостовериться, что в httpd.conf подключен модуль mod_rewrite, а также включена опция FollowSymLinks. На обычных хостингах этот модуль включен.

Редирект без слеша на конце

Еще, одна проблема с дублированием — это открытие страниц со слешем и без слеша на конце URL адреса, То есть. страницы сайта могут открываться по адресам:

  • https://primer.ru/contact/
  • https://primer.ru/contact

Чтобы избежать этой проблемы и настроить редирект без слеша, добавьте в .htaccess такой код.

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ /$1 [R=301,L]

Редирект со слешем в конце

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [L,R=301]

301 редирект в .htaccess

Код состояния HTTP 301 или Moved Permanently — стандартный код ответа HTTP, получаемый в ответ от сервера в ситуации, когда запрошенный ресурс был на постоянной основе перемещен в новое месторасположение, и указывающий на то, что текущие ссылки, использующие данный URL, должны быть обновлены. 

Если ваша ситуация: страница имеет некорректный адрес и находится по ряду поисковых запросов в выдаче. Вы хотите его исправить на более красивый? Для этого пригодится редирект страницы на новый адрес:

https://primer.ru/cont на https://primer.ru/contact

В данной ситуации необходимо лишь добавить следующий код .htaccess:

Redirect 301 /cont https://primer.ru/contact

Второй способ сделать постраничный редирект – это переадресация через php. Именно для этого вида редиректа мы опишем способ через php, так как 301 самый часто используемый вебмастерами. Именно для тех случаев когда сайт на самописной CMS или нет возможности использовать .htaccess, а сайт состоит из набора .php страниц — для переадресации со старого URL на новый вам нужно добавить в самый верх файла кусок кода с редиректом на нужную страницу:

header(«HTTP/1.1 301 Moved Permanently»);
header(«Location: https://primer.ru/test.html»);
exit();

Если редиректов на php много, то для удобства реализации лучше составить отдельный файл, который будет содержать в себе все правила. Пример отдельного файла с редиректами и расширением php:

if($_SERVER[‘REQUEST_URI’] == ‘/old-url-1/’){
header(«HTTP/1.1 301 Moved Permanently»);
header(«Location: https://primer.ru/new-url-1/»);
exit();
}
if($_SERVER[‘REQUEST_URI’] == ‘/old-url-2/’){
header(«HTTP/1.1 301 Moved Permanently»);
header(«Location: https://primer.ru/new-url-2/»);
exit();
}

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

Постраничный Редирект на такую же страницу другого домена ( способ через php):

$ref=$_SERVER[«QUERY_STRING»];
if ($ref!=»») $ref=»?».$ref;
header(«HTTP/1.1 301 Moved Permanently»);
header(«Location: https://primer.ru/».$ref);
exit();

На этом примеры для 301 редирект на php закончим и вернемся к стандартному способу настройки редиректов через .htaccess:

Редирект каталога или категории сайта на новый адрес

Если вы используете некорректный адрес категории сайта, то это тоже можно исправить.

RewriteRule ^pri1-mer /primer/$1 [R=301,L]

Редирект сайта на новый домен

Иногда необходимо перенести старый сайт на новый, возможно более красивый домен. Иногда этого требует ребрендинг компании. Чтобы не потерять позиции сайта и трафик, пропишите на старом сайте следующий код в .htaccess:

Options +FollowSymLinks
RewriteEngine<on
RewriteCond%{REQUEST_FILENAME} robots.txt$ [NC]
RewriteRule ^([^/]+) $1 [L]

RewriteCond%{HTTP_HOST} ^old-primer\.ru
RewriteRule ^(.*)$ http://new-primer.ru/$1 class=»sqbracket»> [R=301,L]
RewriteCond%{HTTP_HOST}^www.old-primer\.ru
RewriteRule ^(.*)$ http://new-primer.ru/$1 [R=301,L]

После этого не забудьте внести изменения в технический файл в Robots.txt, добавив следующий код:

User-agent: Yandex
Host: new-primer.ru

User-agent: *
Disallow:
Sitemap: http://new-primer.ru/sitemap.xml

Перенос сайта на другую CMS и редирект

Следующий момент. Когда вы переносите сайт на новую систему управления, то часто страницы могут иметь иные расширения.

Было — http://primer.ru/okna.html
Стало -http://primer.ru/okna.php

Для этого используйте строчки редиректа:

RedirectMatch 301 (.*)\.html$ http://primer.ru$1.php

Редирект с index.php на корень сайта

Для редиректа 301 вида “primer/index.php” на “http://primer/” используем регулярное выражение:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://primer/ [R=301,L]

Настройка файла .htaccess для домена .рф (кириллических url-адресов)

Кириллические значения не воспринимаются, в этом состоит иногда сложность в работе с редиректами .htaccess для таких проектов, такие домены входят в большую группу IDN-доменов. Например: .РФ, .РУС. где все url-адреса имеют вид — сайт.рф.

Домен РФ нужно перевести в PinyCod, используя простейший, а главное бесплатный Punycode-конвертер для доменов:

Для конвертации вставьте в поисковую строку свой домен:

И получаем результат, но будьте внимательны со строками — чаще всего домен рф (.xn--p1ai) отделен символом \ . Используем все в точности так, как предлагает конвектор:

Далее вы можете использовать переконвертированный домен в различных целях для работы с выражениями .htaccess:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.xn--80arbjktj.xn--p1ai$ [NC]
RewriteRule ^(.*)$ http://xn--80arbjktj.xn--p1ai/$1 [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/
RewriteRule ^index\.html$ http://xn--80arbjktj.xn--p1ai/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ /$1 [R=301,L]

RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^.]+)\.html\ HTTP
RewriteRule ^([^.]+)\.html$ http://xn--80arbjktj.xn--p1ai/$1 [R=301,L]
RewriteCond %{REQUEST_URI} !(\.[^./]+)$
RewriteCond %{REQUEST_fileNAME} !-d
RewriteCond %{REQUEST_fileNAME} !-f
RewriteRule (.*) /$1.html [L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://xn--80arbjktj.xn--p1ai/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ /$1 [R=301,L]

RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^.]+)\.php\ HTTP
RewriteRule ^([^.]+)\.php$ http://xn--80arbjktj.xn--p1ai/$1 [R=301,L]
RewriteCond %{REQUEST_URI} !(\.[^./]+)$
RewriteCond %{REQUEST_fileNAME} !-d
RewriteCond %{REQUEST_fileNAME} !-f
RewriteRule (.*) /$1.php [L]

Редирект с index.html на папку (удаление из строки браузера index.html)

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*index\.html?\ HTTP/
RewriteRule ^(.*)index\.html?$ http://www.primer.com/$1 [R=301,L]

Редирект с .htm файлы на .html файлы

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)\.htm$ $1.html [R=301,L]

Другой вариант с .htm файлы на .html файлы

RewriteRule ^(.*)\.htm$ $1.html [R=301]

Чтобы вместо page.htm загружался файл page.html

RewriteRule ^page\.htm$ page.html [R=301]

Задание типа индексной страницы (php, html, htm и другие)

Указывается порядок загрузки типов индексного файла, лежащих в корне каталога.

DirectoryIndex index.html index.php index.htm index.shtml

Индексный файл — это страница, которая загружается при обращении к вашему сайту. По умолчанию сервер считает домашней страницей файл index. htm, index. html или index.

Пример того, как индексный файл выглядит в каталоге сайта:

Определение кодировки на загружаемые файлы

CharsetSourceEnc windows-1251
Варианты: KOI8-R, UTF-8, Windows-1251

Примеры .htaccess для кэширования. 

С помощью этих команд сайт будет быстрее загружаться для тех пользователей, которые уже заходили на сайт ранее.

Кэширование для всех типов файлов по времени доступа

ExpiresActive on
ExpiresDefault «access plus 600 seconds»

Кэширование для всех типов файлов по времени изменения

ExpiresActive on
ExpiresDefault «modification plus 600 seconds»

Кэширование для определённых типов файлов

ExpiresByType text/css «modification plus 600 seconds»
ExpiresByType image/jpeg «modification plus 600 seconds»
ExpiresByType image/gif «modification plus 600 seconds»
ExpiresByType image/x-ico «modification plus 600 seconds»
ExpiresByType image/png «modification plus 600 seconds»

Дополнительно предоставляем перечень типов файлов, которые можно кэшировать:

image/x-icon;
image/jpeg;
image/png;
image/gif;
application/x-shockwave-flash;
text/css;
text/javascript;
application/javascript;
application/x-javascript;
text/html;
application/xhtml+xml.

Кеширование javascript файлов с помощью файла .htaccess

<FilesMatch .*.js$> ExpiresDefault «access plus 3 days» </FilesMatch>

.htaccess для устранения разных дублей для главной страницы

Обычно код главной страницы физически расположен в файле index.html или index.php, но сайт должен открываться по любому из запросов: site.com, site.com/index.html, www.site.com и www.site.com/index.html. Но для поисковых систем это четыре разных URL! Если не настроить .htaccess верно, поисковик добавит в свой индекс четыре одинаковых страницы. Это признак некачественного сайта. Избежать этой проблемы можно с помощью такого кода в .htaccess:

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^primer.com
RewriteRule (.*) http://www.primer.com/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/
RewriteRule ^index\.html$ http://www.primer.com/ [R=301,L]

Чтобы заставить html-страницы обрабатывать php-код:

RemoveHandler .php .htm .html
AddHandler application/x-httpd-php .php .htm .html

Чтобы разместить два или более сайтов на одном виртуальном хостинге:

RewriteEngine On
RewriteRule ^newdirectory/ — [L]
RewriteCond %{HTTP_HOST} (www.)?newdomain.ru [NC]
RewriteRule (.*) newdirectory/$1 [L]

Где:
newdirectory/ — папка, в которой будет лежать второй сайт
newdomain.ru — домен, для которого мы делаем перенаправление

Обратите внимание, что при этом у Вас будет единый почтовый аккаунт. То есть. если, у Вас существует ящик admin@domain.ru, то после подключения домена newdomain.ru у ящика admin@domain.ru появляется второе имя — admin@newdomain.ru. А при создании любого нового ящика (например info), ему автоматически присваиваются два имени — info@domain.ru и info@newdomain.ru.

Для удаления «category» из URL через .htaccess:

Для изменения ссылки primer.com/category/blue на primer.com/blue, просто добавьте следующий код в конце вашего .htaccess файла.

RewriteRule ^category/(.+)$ http://www.primer.com/$1 [R=301,L]

Редирект для устранения GET параметров

Например, нужно что бы со страницы /?action=page&id=15 был редирект на /page/15/ добавьте строки:

RewriteCond %{QUERY_STRING} action=page [NC]
RewriteCond %{QUERY_STRING} id=(\d+) [NC]
RewriteRule .* /page/%1/? [R=301,L]

Редирект на мобильную версию сайта

Часто мобильная версия это поддомен, например который имеет вид m.primer.com.
Для того чтобы была реализована возможность перехода на мобильную версию только с главной страницы основного домена:

Редирект на мобильную версию сайта (Непроверенная версия)

RewriteCond %{HTTP_USER_AGENT} (?i:midp|samsung|nokia|j2me|avant|docomo|novarra|palmos|palmsource|opwv|chtml|pda|mmp|blackberry
|mib|symbian|wireless|nokia|hand|mobi|phone|cdm|upb|audio|SIE|SEC|samsung|HTC|mot-|mitsu|sagem|sony|alcatel|lg|eric|vx|NEC|philips|mmm|xx|panasonic|sharp|wap|sch|rover|pocket
|benq|java|pt|pg|vox|amoi|bird|compal|kg|voda|sany|kdd|dbt|sendo|sgh|gradi|jb|dddi|moto|iphone|android) [NC]
RewriteCond %{HTTP_HOST} primer.com
RewriteRule ^$ http://m.primer.com/ [R=302,L]

Первой строкой мы проверяем USER_AGENT, определяем что он относится к мобильным устройствам.

Второй строкой проверяем что мы находимся на нужном домене (т.к. пример не универсальный).

Третьей строкой, мы проверяем, что находимся на главной страницы (без всяких параметров и прочего) и перенаправляем на поддомен.

Редирект на мобильную версию сайта (Универсальная версия)

RewriteCond %{HTTP_HOST} ^(.*)$ [NC]
RewriteCond %{HTTP_USER_AGENT} (?i:midp|samsung|nokia|j2me|avant|docomo|novarra|palmos|palmsource|opwv|chtml|pda|mmp|blackberry
|mib|symbian|wireless|nokia|hand|mobi|phone|cdm|upb|audio|SIE|SEC|samsung|HTC|mot-|mitsu|sagem|sony|alcatel|lg|eric|vx|NEC|philips|mmm|xx|panasonic|sharp|wap|sch|rover|pocket|benq
|java|pt|pg|vox|amoi|bird|compal|kg|voda|sany|kdd|dbt|sendo|sgh
|gradi|jb|dddi|moto|iphone|android) [NC]
RewriteRule ^$ http://m.%1 [R=302,L]

Настройка сообщений об ошибках Apache

Самые распространенные коды ошибок:

401 — проблемы с авторизацией.
404 — страница не найдена
403 — доступ запрещен
500 — внутренняя ошибка сервера

Чтобы показывать пользователям свою страницу ошибки вместо стандартной, нужно создать отдельную страницу (например /401.html) и добавить соответствующий код в файл .htaccess. Вот примеры кода, который нужно добавить:

ErrorDocument 401 /401.html
ErrorDocument 403 /403.html
ErrorDocument 404 /404.html
ErrorDocument 500 /500.html

Сохранение (загрузка) файлов вместо открытия

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

AddType application/octet-stream .rar .doc .mov .avi .pdf .xls .mp4

Переадресация с www.primer.com/index.php?idc=4&marea=6 на www.primer.com/

RewriteCond %{QUERY_STRING} ^idc=4&marea=6$ [NC]
RewriteRule ^index\.php$ /? [R=301,L]

Редирект с поддомена на основной домен второго уровня

RewriteCond %{HTTP_HOST} ^test.primer.com$ [NC]
RewriteRule ^(.*)$ http://primer.com%{REQUEST_URI} [R=301,NC,L,QSA]

Изменяем переменные php и передаём обработку другому скрипту

RewriteCond %{QUERY_STRING} ^parameter=(.+)$
RewriteRule (.*) parameter.php\?%1 [L]

В этом примере запрос вида: index.php?parameter=some преобразуется в: parameter.php?some

Убираем переменные php из запроса (вырезаем из URI всё, что находится после знака вопроса)

RewriteRule (.*) $1? [R=301,L]

Запрет входа на сайт через .htaccess

Запрещаем вход на сайт Интернет Эксплореру (вернее, кто себя так определяет) и пользователям с определённого IP-адреса (xxx.xxx.xxx.xxx).

RewriteCond %{HTTP_USER_AGENT} MSIE
RewriteCond %{REMOTE_ADDR} ^xxx\.xxx\.xxx\.xxx$
RewriteRule ^.*$ — [F]

Закрываем от всех вход

deny from all

Закрываем конкретный файл от всех

<Files admin.php>
deny from all
</Files>

Разрешаем доступ только с одного ip

order deny,allow
deny from all
allow from 192.111.37.125

Запрещаем доступ с конкретных ip

<Limit GET POST PUT>
order allow,deny
allow from all
deny from 192.111.35.122
deny from 192.111.37.171
</LIMIT>

При запросе файла .htaccess говорим, что он не существует (410, GONE).

RewriteRule ^/.htaccess$ — [G]

Другой метод:

RewriteRule ^/.htaccess$ — [F]

Запрещаем отображать содержимое директории, если нет индексного файла

Вы скорее всего хоть раз видели текст Index of и список файлов. Так происходит в том случае, когда в директории нет индексного файла (например index.php), а система предлагает выбрать файл для дальнейшего открытия. Минус этого заключается в том, что случайный пользователь может увидеть список и содержание всех файлов директории.

Options -Indexes

Перенаправление с HTTPS на http

RewriteCond %{HTTPS} on
RewriteRule ^.*$ http://%{SERVER_NAME}%{REQUEST_URI}

Редиректы в зависимости от времени

Когда нужно применять уловки типа содержания зависящего от времени масса вебмастеров все ещё используют CGI скрипты которые производят редиректы на специальные страницы. Как это может быть сделано через mod_rewrite?

Есть много переменных названных TIME_xxx для условий редиректа. В связке со специальными лексикографическими образцами для сравнения <STRING, >STRING и =STRING мы можем производить редиректы зависящие от времени:

RewriteCond %{TIME_HOUR}%{TIME_MIN} >0700
RewriteCond %{TIME_HOUR}%{TIME_MIN} <1900
RewriteRule ^foo\.html$ foo.day.html
RewriteRule ^foo\.html$ foo.night.html

Это выдает содержимое foo.day.html при запросе URL foo.html с 07:00 до 19:00 а в оставшееся время содержимое foo.night.html.

Редирект в URL с подчеркивания в дефис

RewriteRule ^(.+)(\s|_)(.+)$ /$1-$3 [R=301,L]

Редирект в URL с больших символов на маленькие

# If there are caps, set HASCAPS to true and skip next rule
RewriteRule [A-Z] — [E=HASCAPS:TRUE,S=1]

# Skip this entire section if no uppercase letters in requested URL
RewriteRule ![A-Z] — [S=28]

# Replace single occurance of CAP with cap, then process next Rule.
RewriteRule ^([^A]*)A(.*)$ $1a$2
RewriteRule ^([^B]*)B(.*)$ $1b$2
RewriteRule ^([^C]*)C(.*)$ $1c$2
RewriteRule ^([^D]*)D(.*)$ $1d$2
RewriteRule ^([^E]*)E(.*)$ $1e$2
RewriteRule ^([^F]*)F(.*)$ $1f$2
RewriteRule ^([^G]*)G(.*)$ $1g$2
RewriteRule ^([^H]*)H(.*)$ $1h$2
RewriteRule ^([^I]*)I(.*)$ $1i$2
RewriteRule ^([^J]*)J(.*)$ $1j$2
RewriteRule ^([^K]*)K(.*)$ $1k$2
RewriteRule ^([^L]*)L(.*)$ $1l$2
RewriteRule ^([^M]*)M(.*)$ $1m$2
RewriteRule ^([^N]*)N(.*)$ $1n$2
RewriteRule ^([^O]*)O(.*)$ $1o$2
RewriteRule ^([^P]*)P(.*)$ $1p$2
RewriteRule ^([^Q]*)Q(.*)$ $1q$2
RewriteRule ^([^R]*)R(.*)$ $1r$2
RewriteRule ^([^S]*)S(.*)$ $1s$2
RewriteRule ^([^T]*)T(.*)$ $1t$2
RewriteRule ^([^U]*)U(.*)$ $1u$2
RewriteRule ^([^V]*)V(.*)$ $1v$2
RewriteRule ^([^W]*)W(.*)$ $1w$2
RewriteRule ^([^X]*)X(.*)$ $1x$2
RewriteRule ^([^Y]*)Y(.*)$ $1y$2
RewriteRule ^([^Z]*)Z(.*)$ $1z$2

# If there are any uppercase letters, restart at very first RewriteRule in fil
RewriteRule [A-Z] — [N]

RewriteCond %{ENV:HASCAPS} TRUE
RewriteRule ^/?(.*) /$1 [R=301,L]

Массовый редирект новых файлов

Предположим вы перешли на новую систему ссылок на вашем сайте и все файлы оканчивающиеся на старый id, то есть ва нужно настроить редирект. Сначала создаем в базе таблицу соответствия, которая содержит старый id и новый URL для редиректа.

old_id INT new_url VARCHAR (255)

Далее пишем код который свяжет ваши старые id с новыми URL-ами
После этого, добавляем следующую строчку в .htaccess:

RewriteRule ^/product-(.*)_([0-9]+).php /redirectold.php?productid=$2
затем создаем PHP файл redirectold.php, который будет поддерживать 301 редирект:

<?php
function getRedirectUrl($productid) {
// Connect to the database
$dServer = «localhost»;
$dDb = «mydbname»;
$dUser = «mydb_user»;
$dPass = «password»;

$s = @mysql_connect($dServer, $dUser, $dPass)
or die(«Couldn’t connect to database server»);

@mysql_select_db($dDb, $s)
or die(«Couldn’t connect to database»);

$query = «SELECT new_url FROM redirects WHERE old_id = «. $productid;
mysql_query($query);
$result = mysql_query($query);
$hasRecords = mysql_num_rows($result) == 0 ? false : true;
if (!$hasRecords) {
$ret = ‘http://www.site.com/’;
} else {
while($row = mysql_fetch_array($result))
{
$ret = ‘http://www.site.com/’. $row[«new_url»];
}
}
mysql_close($s);
return $ret;
}

$productid = $_GET[«productid»];
$url = getRedirectUrl($productid);

header(«HTTP/1.1 301 Moved Permanently»);
header(«Location: $url»);
exit();
?>

Теперь все запросы к вашим старым URL-ам будут вызывать redirectold.php, который найдет новый URL и вернет 301 ответ с вашей новой ссылкой.

Красивый листинг каталогов

# ENABLE INDEXING
Options +Indexes
# INDEX OPTIONS IndexOptions +Charset=UTF-8 +FancyIndexing +IgnoreCase +FoldersFirst +XHTML +HTMLTable +SuppressRules +SuppressDescription +NameWidth=* +IconsAreLinks

# META VIEWPORT IndexHeadInsert «<meta name=\»viewport\» content=\»width=device-width, initial-scale=1\» />»

# HIDE /listing DIRECTORY IndexIgnore .htaccess /listing

# GENERAL ICONS (BLANK, DIRECTORY, PARENT DIRECTORY)

AddIcon /data/listing/icons/blank.png ^^BLANKICON^^ AddIcon /data/listing/icons/folder.png ^^DIRECTORY^^ AddIcon /data/listing/icons/folder-home.png .. AddIconByType (TXT,/data/listing/icons/text.png) text/* AddIconByType (IMG,/data/listing/icons/image.png) image/* AddIconByType (SND,/data/listing/icons/audio.png) audio/* AddIconByType (VID,/data/listing/icons/video.png) video/*

# EXTENSION SPECIFIC ICONS

AddIcon /data/listing/icons/archive.png .7z .bz2 .cab .gz .tar AddIcon /data/listing/icons/audio.png .aac .aif .aifc .aiff .ape .au .flac .iff .m4a .mid .mp3 .mpa .ra .wav .wma .f4a .f4b .oga .ogg .xm .it .s3m .mod AddIcon /data/listing/icons/bin.png .bin .hex AddIcon /data/listing/icons/bmp.png .bmp AddIcon /data/listing/icons/c.png .c AddIcon /data/listing/icons/calc.png .xlsx .xlsm .xltx .xltm .xlam .xlr .xls .csv AddIcon /data/listing/icons/cd.png .iso AddIcon /data/listing/icons/cpp.png .cpp AddIcon /data/listing/icons/css.png .css .sass .scss AddIcon /data/listing/icons/deb.png .deb AddIcon /data/listing/icons/doc.png .doc .docx .docm .dot .dotx .dotm .log .msg .odt .pages .rtf .tex .wpd .wps AddIcon /data/listing/icons/draw.png .svg .svgz AddIcon /data/listing/icons/eps.png .ai .eps AddIcon /data/listing/icons/exe.png .exe AddIcon /data/listing/icons/gif.png .gif AddIcon /data/listing/icons/h.png .h AddIcon /data/listing/icons/html.png .html .xhtml .shtml .htm .URL .url AddIcon /data/listing/icons/ico.png .ico AddIcon /data/listing/icons/java.png .jar AddIcon /data/listing/icons/jpg.png .jpg .jpeg .jpe AddIcon /data/listing/icons/js.png .js .json AddIcon /data/listing/icons/markdown.png .md AddIcon /data/listing/icons/package.png .pkg .dmg AddIcon /data/listing/icons/pdf.png .pdf AddIcon /data/listing/icons/php.png .php .phtml AddIcon /data/listing/icons/playlist.png .m3u .m3u8 .pls .pls8 AddIcon /data/listing/icons/png.png .png AddIcon /data/listing/icons/ps.png .ps AddIcon /data/listing/icons/psd.png .psd AddIcon /data/listing/icons/py.png .py AddIcon /data/listing/icons/rar.png .rar AddIcon /data/listing/icons/rb.png .rb AddIcon /data/listing/icons/rpm.png .rpm AddIcon /data/listing/icons/rss.png .rss AddIcon /data/listing/icons/script.png .bat .cmd .sh AddIcon /data/listing/icons/sql.png .sql AddIcon /data/listing/icons/tiff.png .tiff .tif AddIcon /data/listing/icons/text.png .txt .nfo AddIcon /data/listing/icons/video.png .asf .asx .avi .flv .mkv .mov .mp4 .mpg .rm .srt .swf .vob .wmv .m4v .f4v .f4p .ogv AddIcon /data/listing/icons/xml.png .xml AddIcon /data/listing/icons/zip.png .zip DefaultIcon /data/listing/icons/default.png

# listing FILES

HeaderName /data/listing/header.html ReadmeName /data/listing/footer.html IndexStyleSheet «/data/listing/style.css»

Переадресация Вашего фида на Feedburner

Если Вы хотите, чтобы на Ваш RSS-фид подписывались через Feedburner, то используйте следующий код:

RewriteCond %{HTTP_USER_AGENT} !FeedBurner
RewriteRule ^your-feed\.xml$ http://feeds.feedburner.com/your-feed [R,L]

Создание ЧПУ (человеко-понятных урлов)

C его помощью можно преобразовать, например, www.primer.ru/product.php?id=123 в www.primer.ru/product/123 следующим образом:

RewriteEngine on
RewriteRule ^product/([^/\.]+)/?$ product.php?id=$1 [L]

В другом примере преобразуем www.primer.ru/script.php?product=123 в www.primer.ru/cat/product/123/:

RewriteRule cat/(.*)/(.*)/$ /script.php?$1=$2

Избавляемся от QUERY_STRING

Некоторые веб-мастера делают ссылки вида www.primer.ru/index.php?source=blogstorm, чтобы знать, откуда идут посетители. Из-за этого появляется дублированный контент, от которого надо избавляться:

RewriteCond %{QUERY_STRING} ^source= RewriteRule (.*) /$1? [R=301,L]

Сжатие компонентов сайта с помощью модулей

В .htaccess можно включить сжатие при помощи двух модулей — mod_zip и mod_deflate:

<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>

При этом в mod_deflate необходимо указать типы файлов, которые следует сжать:

<ifModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript
</ifModule>

Настройка безопасности сайта с помощью .htaccess

  • Защита изображений от скачивания конкурентами:

Options +FollowSymlinks
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https://(www.)?primer.com/ [nc]
RewriteRule .*.(gif|jpg|png)$ https://primer.com/img/goaway.gif[nc]

  • Директивы для блокирования User Agents (ботов):

SetEnvIfNoCase user-Agent ^FrontPage [NC,OR]
SetEnvIfNoCase user-Agent ^Java.* [NC,OR]
SetEnvIfNoCase user-Agent ^Microsoft.URL [NC,OR]
SetEnvIfNoCase user-Agent ^MSFrontPage [NC,OR]
SetEnvIfNoCase user-Agent ^Offline.Explorer [NC,OR]
SetEnvIfNoCase user-Agent ^[Ww]eb[Bb]andit [NC,OR]
SetEnvIfNoCase user-Agent ^Zeus [NC]
<limit get=»» post=»» head=»»>
Order Allow,Deny
Allow from all
Deny from env=bad_bot
</limit>

  • Блокировка трафика с нежелательных ресурсов:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_REFERER} bad-primer.com [NC,OR]
RewriteCond %{HTTP_REFERER} bad-primer.com [NC,OR]
RewriteRule .* — [F]
</ifModule>

  • Настройка доступа к файлам или папкам по паролю:

user:password, Где «user» — это логин пользователя, а «password» — соответствующий пароль.

  • Установка пароля для файла:

<files secure.php=»»>
AuthType Basic
AuthName «»
AuthUserFile /pub/home/.htpasswd
Require valid-user
</files>

  • Установка пароля для папки:

resides
AuthType basic
AuthName «This directory is protected»
AuthUserFile /pub/home/.htpasswd
AuthGroupFile /dev/null
Require valid-user

  • Защита от внедрения скриптов:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule ^(.*)$ index.php [F,L]

При попытке реализовать любой скрипт на сайте злоумышленник получит ответ сервера 403 — «доступ запрещен».

  • Защищаем сайт от DOS-атак с помощью установки лимита на максимальный размер запроса:

LimitRequestBody 10240000

* этой директиве указано ограничение на файлы больше 10 Мбайт.

  • Борьба со спамерами в комментариях (Вариант рабочий только для сайтов на WordPress):

RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .wp-comments-post\.php*
RewriteCond %{HTTP_REFERER} !.*primer.com.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]

  • Указание e-mail для администратора сервера:

ServerSignature EMail
SetEnv SERVER_ADMIN admin@primer.com

  • Блок кода позволяющий запретить доступ ботам на сайт:

RewriteCond %{HTTP_USER_AGENT} (Googlebot|Slurp|spider|Twiceler|heritrix|
Combine|appie|boitho|e-SocietyRobot|Exabot|Nutch|OmniExplorer|
MJ12bot|ZyBorg/1|Ask Jeeves|AskJeeves|ActiveTouristBot|
JemmaTheTourist| agadine3|BecomeBot|Clustered-Search-Bot|
MSIECrawler|freefind|galaxy|genieknows|INGRID|grub-client|
MojeekBot|NaverBot|NetNose-Crawler|OnetSzukaj|PrassoSunner|
Asterias Crawler|T-H-U-N-D-E-R-S-T-O-N-E|GeorgeTheTouristBot|
VoilaBot|Vagabondo|fantomBro wser|stealthBrowser|cloakBrowser|
fantomCrew Browser|Girafabot|Indy Library|Intelliseek|Zealbot|
Windows 95|^Mozilla/4.05 [en]$|^Mozilla/4.0$) [NC]
RewriteRule ^(.*)$ — [F]
#
RewriteCond %{HTTP_USER_AGENT} ^Mozilla.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Opera.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Firefox.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Netscape.* [NC]
RewriteRule ^(.*)$ — [L]
RewriteRule ^(.*)$ — [F]

  • Отслеживание обращений к файлу robots.txt:

Чтобы иметь больше информации о посещении поисковиков, полезно иметь подробную информацию об обращении к файлу robots.txt Для того, чтобы организовать это, в ‘.htaccess’ должны быть следующие записи:

RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteRule ^robots.txt$ /robot.php?%{REQUEST_URI}

Примеры редактирования готового .htaccess в CMS

В Битриксе вы сможете редактировать .htaccess прямо из административной панели:

Чтобы обнаружить этот документ, вам достаточно зайти в файловый менеджер вашего хостинга или же воспользоваться FTP-клиентом. Его можно будет открыть с помощью любого текстового редактора.

Если ваш сайт работает на WordPress, воспользуйтесь функционалом плагинов Yoast SEO и All in One SEO Pack (их модули позволяют работать с файлом .htaccess). Перейдите во вкладку “Инструменты”. Содержимое конфига будет доступно прямо там, в специальном окне. Вы сможете легко его менять, и все изменения будут автоматически заноситься в настоящий конфиг.

Вывод:

Настройка .htaccess (англ. hypertext access) – дело ответственное, требующее особых знаний и понимания процесса.Если вы что-то неверно введете, или например добавите лишний пробел или символ, то велика вероятность, что ваш ресурс просто перестанет открываться. Он будет просто выдавать ошибку, и для исправления вам придется заходить на хостинг и сбрасывать все изменения этого документа.

Важно!

Изменяя файл .htaccess можно серьезно нарушить работу сайта, а также необдуманные действия с ним могут не иметь видимых последствий, но повлечь за собой снижение позиций в поисковых системах либо полную их потерю.Поэтому, для того, чтобы вместо сайта не увидеть ошибку, связанную с файлом .htaccess, настоятельно рекомендуем изначально узнать какие директивы можно использовать для его настройки. Далее мы приведем Файлы .htaccess для популярных CMS стандартного значения, чтобы минимизировать риски работы с данным файлом:

Файл .htaccess для Joomla

##
# @version $Id: htaccess.txt 14401 2010-01-26 14:10:00Z louis $
# @package Joomla
# @copyright Copyright (C) 2005 — 2010 Open Source Matters. All rights reserved.
# @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
# Joomla! is Free Software
##


#####################################################
# READ THIS COMPLETELY IF YOU CHOOSE TO USE THIS FILE
#
# The line just below this section: ‘Options +FollowSymLinks’ may cause problems
# with some server configurations. It is required for use of mod_rewrite, but may already
# be set by your server administrator in a way that dissallows changing it in
# your .htaccess file. If using it causes your server to error out, comment it out (add # to
# beginning of line), reload your site in your browser and test your sef url’s. If they work,
# it has been set by your server administrator and you do not need it set here.
#
#####################################################

## Can be commented out if causes errors, see notes above.
Options +FollowSymLinks

#
# mod_rewrite in use

RewriteEngine On

########## Begin — Rewrite rules to block out some common exploits
## If you experience problems on your site block out the operations listed below
## This attempts to block the most common type of exploit `attempts` to Joomla!
#
## Deny access to extension xml files (uncomment out to activate)
#<Files ~ «\.xml$»>
#Order allow,deny
#Deny from all
#Satisfy all
#</Files>
## End of deny access to extension xml files
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]
# Block out any script trying to base64_encode crap to send via URL
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR]
# Block out any script that includes a <script> tag in URL
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
# Block out any script trying to set a PHP GLOBALS variable via URL
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
# Block out any script trying to modify a _REQUEST variable via URL
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
# Send all blocked request to homepage with 403 Forbidden error!
RewriteRule ^(.*)$ index.php [F,L]
#
########## End — Rewrite rules to block out some common exploits

# Uncomment following line if your webserver’s URL
# is not directly related to physical file paths.
# Update Your Joomla! Directory (just / for root)

# RewriteBase /


########## Begin — Joomla! core SEF Section
#
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{REQUEST_URI} (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$ [NC]
RewriteRule (.*) index.php
RewriteRule .* — [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
#
########## End — Joomla! core SEF Section

Файл .htaccess для WordPress

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Файл .htaccess для HostCMS

Options +FollowSymlinks
AddDefaultCharset Off
<IfModule mod_php4.c>
php_flag magic_quotes_gpc off
php_flag magic_quotes_runtime off
php_flag register_globals off
</IfModule>
<IfModule mod_php5.c>
php_flag magic_quotes_gpc off
php_flag magic_quotes_runtime off
php_flag register_globals off
</IfModule>
<IfModule mod_dir.c>
DirectoryIndex index.php index.htm index.html
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php
</IfModule>

Файл .htaccess для Bitrix:

Options -Indexes
ErrorDocument 404 /404.php

<IfModule mod_php5.c>
php_flag allow_call_time_pass_reference 1
php_flag session.use_trans_sid off

#php_value display_errors 1

#php_value mbstring.func_overload 2
#php_value mbstring.internal_encoding UTF-8
</IfModule>

<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$
RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]
RewriteRule .* — [E=REMOTE_USER:%{HTTP:Authorization}]
</IfModule>

<IfModule mod_dir.c>
DirectoryIndex index.php index.html
</IfModule>

<IfModule mod_expires.c>
ExpiresActive on
ExpiresByType image/jpeg «access plus 3 day»
ExpiresByType image/gif «access plus 3 day»
</IfModule>

 

Файл .htaccess для ModX:

# MODx supports Friendly URLs via this .htaccess file. You must serve web
# pages via Apache with mod_rewrite to use this functionality, and you must
# change the file name from ht.access to .htaccess.
#
# Make sure RewriteBase points to the directory where you installed MODx.
# E.g., «/modx» if your installation is in a «modx» subdirectory.
#
# You may choose to make your URLs non-case-sensitive by adding a NC directive
# to your rule: RewriteRule ^(.*)$ index.php?q=$1 [L,QSA,NC]

RewriteEngine On
RewriteBase /

# Rewrite www.domain.com -> domain.com — used with SEO Strict URLs plugin
#RewriteCond %{HTTP_HOST} .
#RewriteCond %{HTTP_HOST} !^example-domain-please-change\.com [NC]
#RewriteRule (.*) http://example-domain-please-change.com/$1 [R=301,L]
#
# or for the opposite domain.com -> www.domain.com use the following
# DO NOT USE BOTH
#
#RewriteCond %{HTTP_HOST} .
#RewriteCond %{HTTP_HOST} !^www\.example-domain-please-change\.com [NC]
#RewriteRule (.*) http://www.example-domain-please-change.com/$1 [R=301,L]
#
# Rewrite secure requests properly to prevent SSL cert warnings, e.g. prevent
# https://www.domain.com when your cert only allows https://secure.domain.com
#RewriteCond %{SERVER_PORT} !^443
#RewriteRule (.*) https://example-domain-please-change.com.com/$1 [R=301,L]
#
# The Friendly URLs part
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
#
# Make sure .htc files are served with the proper MIME type, which is critical # for XP SP2. Un-comment if your host allows htaccess MIME type overrides.
#AddType text/x-component .htc
#
# If your server is not already configured as such, the following directive
# should be uncommented in order to set PHP’s register_globals option to OFF.
# This closes a major security hole that is abused by most XSS (cross-site
# scripting) attacks. For more information: http://php.net/register_globals
#
# To verify that this option has been set to OFF, open the Manager and choose
# Reports -> System Info and then click the phpinfo() link. Do a Find on Page
# for «register_globals». The Local Value should be OFF. If the Master Value
# is OFF then you do not need this directive here.
#
# IF REGISTER_GLOBALS DIRECTIVE CAUSES 500 INTERNAL SERVER ERRORS :
#
# Your server does not allow PHP directives to be set via .htaccess. In that
# case you must make this change in your php.ini file instead. If you are
# using a commercial web host, contact the administrators for assistance in
# doing this. Not all servers allow local php.ini files, and they should
# include all PHP configurations (not just this one), or you will effectively
# reset everything to PHP defaults. Consult www.php.net for more detailed
# information about setting PHP directives.
#
#php_flag register_globals Off
#
# For servers that support output compression, you should pick up a bit of
# speed by un-commenting the following lines.
#
#php_flag zlib.output_compression On
#php_value zlib.output_compression_level 5
#
# The following directives stop screen flicker in IE on CSS rollovers. If
# needed, un-comment the following rules. When they’re in place, you may have
# to do a force-refresh in order to see changes in your designs.
#
#ExpiresActive On
#ExpiresByType image/gif A2592000
#ExpiresByType image/jpeg A2592000
#ExpiresByType image/png A2592000
#BrowserMatch «MSIE» brokenvary=1
#BrowserMatch «Mozilla/4.[0-9]{2}» brokenvary=1
#BrowserMatch «Opera» !brokenvary
#SetEnvIf brokenvary 1 force-no-vary

Файл .htaccess для Drupal:

#
# Apache/PHP/Drupal settings:
#

# Protect files and directories from prying eyes.
<FilesMatch «\.(engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)$|^(\..*|Entries.*|Repository|Root|Tag|Template)$»>
Order allow,deny
</FilesMatch>

# Don’t show directory listings for URLs which map to a directory.
Options -Indexes

# Follow symbolic links in this directory.
Options +FollowSymLinks

# Make Drupal handle any 404 errors.
ErrorDocument 404 /index.php

# Force simple error message for requests for non-existent favicon.ico.
<Files favicon.ico>
# There is no end quote below, for compatibility with Apache 1.3.
ErrorDocument 404 «The requested file favicon.ico was not found.
</Files>

# Set the default handler.
DirectoryIndex index.php index.html index.htm

# Override PHP settings that cannot be changed at runtime. See
# sites/default/default.settings.php and drupal_initialize_variables() in
# includes/bootstrap.inc for settings that can be changed at runtime.

# PHP 5, Apache 1 and 2.
<IfModule mod_php5.c>
php_flag magic_quotes_gpc off
php_flag magic_quotes_sybase off
php_flag register_globals off
php_flag session.auto_start off
php_value mbstring.http_input pass
php_value mbstring.http_output pass
php_flag mbstring.encoding_translation off
</IfModule>

# Requires mod_expires to be enabled.
<IfModule mod_expires.c>
# Enable expirations.
ExpiresActive On

# Cache all files for 2 weeks after access (A).
ExpiresDefault A1209600

<FilesMatch \.php$>
# Do not allow PHP scripts to be cached unless they explicitly send cache
# headers themselves. Otherwise all scripts would have to overwrite the
# headers set by mod_expires if they want another caching behavior. This may
# fail if an error occurs early in the bootstrap process, and it may cause
# problems if a non-Drupal PHP file is installed in a subdirectory.
ExpiresActive Off
</FilesMatch>
</IfModule>

# Various rewrite rules.
<IfModule mod_rewrite.c>
RewriteEngine on

# Block access to «hidden» directories whose names begin with a period. This
# includes directories used by version control systems such as Subversion or
# Git to store control files. Files whose names begin with a period, as well
# as the control files used by CVS, are protected by the FilesMatch directive
# above.
#
# NOTE: This only works when mod_rewrite is loaded. Without mod_rewrite, it is
# not possible to block access to entire directories from .htaccess, because
# <DirectoryMatch> is not allowed here.
#
# If you do not have mod_rewrite installed, you should remove these
# directories from your webroot or otherwise protect them from being
# downloaded.
RewriteRule «(^|/)\.» — [F]

# If your site can be accessed both with and without the ‘www.’ prefix, you
# can use one of the following settings to redirect users to your preferred
# URL, either WITH or WITHOUT the ‘www.’ prefix. Choose ONLY one option:
#
# To redirect all users to access the site WITH the ‘www.’ prefix,
# (http://example.com/… will be redirected to http://www.example.com/…)
# uncomment the following:
# RewriteCond %{HTTP_HOST} !^www\. [NC]
# RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
#
# To redirect all users to access the site WITHOUT the ‘www.’ prefix,
# (http://www.example.com/… will be redirected to http://example.com/…)
# uncomment the following:
# RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
# RewriteRule ^ http://%1%{REQUEST_URI} [L,R=301]

# Modify the RewriteBase if you are using Drupal in a subdirectory or in a
# VirtualDocumentRoot and the rewrite rules are not working properly.
# For example if your site is at http://example.com/drupal uncomment and
# modify the following line:
# RewriteBase /drupal
#
# If your site is running in a VirtualDocumentRoot at http://example.com/,
# uncomment the following line:
# RewriteBase /

# Pass all requests not referring directly to files in the filesystem to
# index.php. Clean URLs are handled in drupal_environment_initialize().
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^ index.php [L]

# Rules to correctly serve gzip compressed CSS and JS files.
# Requires both mod_rewrite and mod_headers to be enabled.
<IfModule mod_headers.c>
# Serve gzip compressed CSS files if they exist and the client accepts gzip.
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}\.gz -s
RewriteRule ^(.*)\.css $1\.css\.gz [QSA]

# Serve gzip compressed JS files if they exist and the client accepts gzip.
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}\.gz -s
RewriteRule ^(.*)\.js $1\.js\.gz [QSA]

# Serve correct content types, and prevent mod_deflate double gzip.
RewriteRule \.css\.gz$ — [T=text/css,E=no-gzip:1]
RewriteRule \.js\.gz$ — [T=text/javascript,E=no-gzip:1]

<FilesMatch «(\.js\.gz|\.css\.gz)$»>
# Serve correct encoding type.
Header append Content-Encoding gzip
# Force proxies to cache gzipped & non-gzipped css/js files separately.
Header append Vary Accept-Encoding
</FilesMatch>
</IfModule>
</IfModule>

Файл .htaccess для NetCat

AddDefaultCharset windows-1251
ErrorDocument 404 /netcat/require/e404.php

<ifModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ /netcat/require/e404.php?REQUEST_URI=$1 [L,QSA]
</ifModule>

Файл .htaccess для DLE

DirectoryIndex index.php
RewriteEngine On
RewriteBase /
# Редиректы
RewriteRule ^page/(.*)$ index.php?cstart=$1 [L]

# Сам пост
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),([0-9]+),(.*).html(/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&cstart=$5&news_name=$6 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),(.*).html(/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/print:page,([0-9]+),(.*).html(/?)+$ engine/print.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*).html(/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_name=$4 [L]

RewriteRule ^([^.]+)/page,([0-9]+),([0-9]+),([0-9]+)-(.*).html(/?)+$ index.php?newsid=$4&news_page=$2&cstart=$3&seourl=$5&seocat=$1 [L]
RewriteRule ^([^.]+)/page,([0-9]+),([0-9]+)-(.*).html(/?)+$ index.php?newsid=$3&news_page=$2&seourl=$4&seocat=$1 [L]
RewriteRule ^([^.]+)/print:page,([0-9]+),([0-9]+)-(.*).html(/?)+$ engine/print.php?news_page=$2&newsid=$3&seourl=$4&seocat=$1 [L]
RewriteRule ^([^.]+)/([0-9]+)-(.*).html(/?)+$ index.php?newsid=$2&seourl=$3&seocat=$1 [L]

RewriteRule ^page,([0-9]+),([0-9]+),([0-9]+)-(.*).html(/?)+$ index.php?newsid=$3&news_page=$1&cstart=$2&seourl=$4 [L]
RewriteRule ^page,([0-9]+),([0-9]+)-(.*).html(/?)+$ index.php?newsid=$2&news_page=$1&seourl=$3 [L]
RewriteRule ^print:page,([0-9]+),([0-9]+)-(.*).html(/?)+$ engine/print.php?news_page=$1&newsid=$2&seourl=$3 [L]
RewriteRule ^([0-9]+)-(.*).html(/?)+$ index.php?newsid=$1&seourl=$2 [L]

# За день
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})(/?)+$ index.php?year=$1&month=$2&day=$3 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page/([0-9]+)(/?)+$ index.php?year=$1&month=$2&day=$3&cstart=$4 [L]
# За весь месяц
RewriteRule ^([0-9]{4})/([0-9]{2})(/?)+$ index.php?year=$1&month=$2 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/page/([0-9]+)(/?)+$ index.php?year=$1&month=$2&cstart=$3 [L]
# Вывод за весь год
RewriteRule ^([0-9]{4})(/?)+$ index.php?year=$1 [L]
RewriteRule ^([0-9]{4})/page/([0-9]+)(/?)+$ index.php?year=$1&cstart=$2 [L]
# вывод отдельному тегу
RewriteRule ^tags/([^/]*)(/?)+$ index.php?do=tags&tag=$1 [L]
RewriteRule ^tags/([^/]*)/page/([0-9]+)(/?)+$ index.php?do=tags&tag=$1&cstart=$2 [L]
# вывод для отдельного юзера
RewriteRule ^user/([^/]*)/rss.xml$ engine/rss.php?subaction=allnews&user=$1 [L]
RewriteRule ^user/([^/]*)(/?)+$ index.php?subaction=userinfo&user=$1 [L]
RewriteRule ^user/([^/]*)/page/([0-9]+)(/?)+$ index.php?subaction=userinfo&user=$1&cstart=$2 [L]
RewriteRule ^user/([^/]*)/news(/?)+$ index.php?subaction=allnews&user=$1 [L]
RewriteRule ^user/([^/]*)/news/page/([0-9]+)(/?)+$ index.php?subaction=allnews&user=$1&cstart=$2 [L]
RewriteRule ^user/([^/]*)/news/rss.xml(/?)+$ engine/rss.php?subaction=allnews&user=$1 [L]
# вывод всех последних новостей
RewriteRule ^lastnews/(/?)+$ index.php?do=lastnews [L]
RewriteRule ^lastnews/page/([0-9]+)(/?)+$ index.php?do=lastnews&cstart=$1 [L]
# вывод в виде каталога
RewriteRule ^catalog/([^/]*)/rss.xml$ engine/rss.php?catalog=$1 [L]
RewriteRule ^catalog/([^/]*)(/?)+$ index.php?catalog=$1 [L]
RewriteRule ^catalog/([^/]*)/page/([0-9]+)(/?)+$ index.php?catalog=$1&cstart=$2 [L]
# вывод непрочитанных статей
RewriteRule ^newposts(/?)+$ index.php?subaction=newposts [L]
RewriteRule ^newposts/page/([0-9]+)(/?)+$ index.php?subaction=newposts&cstart=$1 [L]
# вывод избранных статей
RewriteRule ^favorites(/?)+$ index.php?do=favorites [L]
RewriteRule ^favorites/page/([0-9]+)(/?)+$ index.php?do=favorites&cstart=$1 [L]

RewriteRule ^rules.html$ index.php?do=rules [L]
RewriteRule ^statistics.html$ index.php?do=stats [L]
RewriteRule ^addnews.html$ index.php?do=addnews [L]
RewriteRule ^rss.xml$ engine/rss.php [L]
RewriteRule ^sitemap.xml$ uploads/sitemap.xml [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^.]+)/page/([0-9]+)/$ index.php?do=cat&category=$1&cstart=$2 [L]
RewriteRule ^([^.]+)/$ index.php?do=cat&category=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^.]+)/rss.xml$ engine/rss.php?do=cat&category=$1 [L]
RewriteRule ^page,([0-9]+),([^/]+).html$ index.php?do=static&page=$2&news_page=$1 [L]
RewriteRule ^print:([^/]+).html$ engine/print.php?do=static&page=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+).html$ index.php?do=static&page=$1 [L]

Файл .htaccess для Opencart

Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

Файл .htaccess для Webasyst

<FilesMatch «\.md5$»>
Deny from all
</FilesMatch>

DirectoryIndex index.php
Options -Indexes
# Comment the following line, if option Multiviews not allowed here
Options -MultiViews

AddDefaultCharset utf-8

<ifModule mod_rewrite.c>
RewriteEngine On
# Uncomment the following line, if you are having trouble
RewriteBase /

RewriteCond %{REQUEST_URI} !\.(js|css|jpg|jpeg|gif|png|svg|ttf|eot|otf|woff|woff2)$ [or]
RewriteCond %{REQUEST_URI} apple-touch-icon\.png$ [or]
RewriteCond %{REQUEST_METHOD} ^(POST|PUT|COPY|MOVE|DELETE|PROPFIND|OPTIONS|MKCOL)$ [or]
RewriteCond %{HTTP:Translate} ^.+$ [or]
RewriteCond %{HTTP_USER_AGENT} ^(DavClnt|litmus|gvfs|davfs|wdfs|WebDAV|cadaver|Cyberduck)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]
</ifModule>

<ifModule mod_headers.c>
<FilesMatch «\.(jpg|jpeg|png|gif|js|css|svg|ttf|eot|otf|woff|woff2)$»>
Header set Cache-Control «max-age=3153600, public»
</FilesMatch>
</ifModule>

Файл .htaccess для LiveStreet

AddDefaultCharset UTF-8
Options -Indexes
RewriteEngine On
#RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php
# Alternative rule
#RewriteRule ^(.*)$ /index.php

<Files «plugins.dat»>
order allow,deny
deny from all
</Files>

Оставьте заявку, мы проведем бесплатный аудит вашего бизнеса

    Ваши данные не будут переданы третьим лицам.
    Автор
    Юлия Букреева
    Middle SEO Specialist

    Понравилась ли вам статья?

    Нажмите на звезду, чтобы оценить!

    Средняя оценка 4.1 / 5. Количество оценок: 31

    Оценок пока нет. Поставьте оценку первым.

    Вам нужен системный и рентабельный трафик на сайт?
    Оставьте заявку и получите бесплатную консультацию наших специалистов

      Комментарии (2)
      1. htaccess вебмастер может сделать много полезного, чтобы сайт работал корректно.

      2. Здравствуйте! Благодарю за статью.

      Добавить комментарий

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

      Cookies policy
      Просматривая этот сайт, вы соглашаетесь с нашей политикой конфиденциальности —