Оптимизация веб-сайта через .htaccess
В RegisTeam мы используем .htaccess для оптимизации сайтов, улучшая их производительность и безопасность. Наша команда настраивает файлы .htaccess для ускорения загрузки страниц, защиты от атак и улучшения SEO. Свяжитесь с нами для консультации и подробной информации через нашу страницу контактов.
Что представляет собой файл .htaccess и модуль mod_rewrite?
Файл .htaccess (Hypertext Access) представляет собой конфигурационный файл, используемый веб-серверами Apache для управления поведением веб-сайтов и веб-страниц. Этот файл размещается в корневом каталоге веб-сайта и предоставляет администраторам возможность тонкой настройки различных аспектов работы сервера без необходимости прямого вмешательства в основную конфигурацию сервера. Файл .htaccess может содержать директивы для управления перенаправлениями, доступом к файлам, настройками безопасности, кэшированием и многими другими аспектами работы веб-сервера.
Редирект — это процесс перенаправления пользователя с одной страницы сайта на другую (с одного URL на другой). Редиректы могут направлять посетителей как на внутренние страницы сайта, так и на страницы других сайтов.
Основные возможности файла .htaccess
Одной из ключевых функций файла .htaccess является возможность управления перенаправлениями и URL-адресами с использованием модуля mod_rewrite. Этот модуль позволяет создавать сложные правила для переписывания URL-адресов, что может существенно улучшить структуру и читаемость URL, а также помочь в SEO-оптимизации сайта. Например, с помощью mod_rewrite можно настроить перенаправление с «http://example.com/page» на «http://example.com/new-page», что позволяет избежать ошибок 404 и сохранить позиции страницы в поисковых системах.
Mod_rewrite: примеры и применение
Mod_rewrite также используется для создания дружественных URL, которые легче воспринимаются пользователями и поисковыми системами. Например, вместо URL вида «http://example.com/index.php?page=products&category=5» можно создать более чистый и понятный URL вида «http://example.com/products/category/5». Для этого в файл .htaccess добавляются специальные правила, которые указывают серверу, как обрабатывать запросы и переписывать URL. Эти правила могут быть достаточно гибкими и мощными, позволяя администраторам веб-сайтов реализовывать самые разнообразные сценарии перенаправлений и обработки запросов.
Файл httpd.conf позволяет настроить работу сервера. После внесения необходимых изменений в этот файл, можно запускать сервер.
Файл .htaccess и модуль mod_rewrite являются мощными инструментами в арсенале администратора веб-сайта, предоставляя возможность гибкого управления сервером и оптимизации его работы. С их помощью можно улучшить безопасность сайта, повысить его производительность и создать более удобную и логичную структуру URL, что в свою очередь положительно скажется на пользовательском опыте и SEO. Понимание и грамотное использование этих инструментов являются важными аспектами успешного администрирования и развития веб-ресурсов.
Доступ к файлу httpd.conf для обычных пользователей ограничен, а .htaccess позволяет изменять некоторые директивы из httpd.conf. Действие директив из .htaccess распространяется на весь каталог, в котором он расположен. Поэтому, если разместить его в корневом каталоге, изменения будут применяться ко всему сайту. Это удобно для вебмастеров, которые хотят вносить изменения в работу сайта без участия системных администраторов. Если файл .htaccess находится в подкаталоге, его директивы будут применяться только к этому подкаталогу и его подкаталогам. Приоритетными считаются команды, прописанные в .htaccess, расположенном в конкретном каталоге.
Основные операторы для работы с файлом .htaccess
Ниже приведены основные операторы для файла .htaccess с их синтаксисом и описанием.
Authentication и Authorization
1. AuthType
— Описание: Определяет тип аутентификации, используемой для доступа к защищенному ресурсу.
— Синтаксис: AuthType Basic
2. AuthName
— Описание: Устанавливает имя области (realm) аутентификации, отображаемое пользователю.
— Синтаксис: AuthName «Restricted Area»
3. AuthUserFile
— Описание: Указывает путь к файлу, содержащему имена пользователей и пароли.
— Синтаксис: AuthUserFile /path/to/.htpasswd
4. AuthGroupFile
— Описание: Указывает путь к файлу, содержащему информацию о группах пользователей.
— Синтаксис: AuthGroupFile /path/to/.htgroup
5. Require
— Описание: Определяет требования к пользователю для доступа к ресурсу.
— Синтаксис: Require valid-user
Редиректы и перезаписи URL
1. Redirect
— Описание: Перенаправляет запросы с одного URL на другой.
— Синтаксис: Redirect [status] /old-url /new-url
2. RedirectMatch
— Описание: Перенаправляет запросы, соответствующие регулярному выражению.
— Синтаксис: RedirectMatch [status] regex-url target-url
3. RewriteEngine
— Описание: Включает или отключает механизм перезаписи URL.
— Синтаксис: RewriteEngine On
4. RewriteCond
— Описание: Определяет условие, при котором применяется правило перезаписи.
— Синтаксис: RewriteCond test-string condition-pattern
5. RewriteRule
— Описание: Определяет правило перезаписи URL.
— Синтаксис: RewriteRule pattern target [flags]
Настройка директорий
1. DirectoryIndex
— Описание: Определяет файл, который будет использоваться в качестве индексного в директории.
— Синтаксис: DirectoryIndex filename
2. Options
— Описание: Настраивает различные параметры для директории.
— Синтаксис: Options option1 option2
3. AllowOverride
— Описание: Указывает, какие директивы могут быть переопределены в .htaccess.
— Синтаксис: AllowOverride directive
Управление доступом
1. Order
— Описание: Определяет порядок применения директив Allow и Deny.
— Синтаксис: Order allow,deny
2. Allow
— Описание: Разрешает доступ из указанных источников.
— Синтаксис: Allow from address
3. Deny
— Описание: Запрещает доступ из указанных источников.
— Синтаксис: Deny from address
Настройка кеширования
1. ExpiresActive
— Описание: Включает или отключает механизм управления истечением срока действия содержимого.
— Синтаксис: ExpiresActive On
2. ExpiresByType
— Описание: Устанавливает срок действия содержимого на основе MIME-типа.
— Синтаксис: ExpiresByType type value
3. Header
— Описание: Добавляет или изменяет заголовки HTTP.
— Синтаксис: Header set name value
Настройка ошибок
1. ErrorDocument
— Описание: Определяет пользовательские страницы ошибок.
— Синтаксис: ErrorDocument error-code document
Управление MIME-типами
1. AddType
— Описание: Назначает MIME-типы файлам с определенными расширениями.
— Синтаксис: AddType mime-type extension
2. AddHandler
— Описание: Назначает обработчик для файлов с определенными расширениями.
— Синтаксис: AddHandler handler extension
Настройка сжатия
1. AddOutputFilterByType
— Описание: Применяет фильтр к содержимому на основе MIME-типа.
— Синтаксис: AddOutputFilterByType filter mime-type
2. SetOutputFilter
— Описание: Устанавливает фильтр для содержимого.
— Синтаксис: SetOutputFilter filter
Переменные окружения
1. SetEnv
— Описание: Устанавливает значение переменной окружения.
— Синтаксис: SetEnv variable value
2. UnsetEnv
— Описание: Удаляет значение переменной окружения.
— Синтаксис: UnsetEnv variable
3. PassEnv
— Описание: Передает переменные окружения внешним программам.
— Синтаксис: PassEnv variable
Настройка заголовков
1. Header
— Описание: Управляет HTTP-заголовками.
— Синтаксис: Header set|append|add|unset name value
Настройка заголовков
1. Include
— Описание: Включает содержимое другого конфигурационного файла.
— Синтаксис: Include file
2. AddDefaultCharset
— Описание: Устанавливает кодировку по умолчанию для текста.
— Синтаксис: AddDefaultCharset charset
3. FileETag
— Описание: Настраивает ETag для файлов.
— Синтаксис: FileETag component
Контроль доступа к IP
1. Deny from
— Описание: Запрещает доступ с указанных IP-адресов.
— Синтаксис: Deny from address
2. Allow from
— Описание: Разрешает доступ с указанных IP-адресов.
— Синтаксис: Allow from address
Этот список включает основные операторы, используемые в .htaccess, их синтаксис и примеры. Эти операторы помогут вам эффективно управлять конфигурацией вашего веб-сервера Apache.
Символы и их значения
1) . (точка)
— Описание: Соответствует любому одиночному символу, кроме новой строки.
— Пример: a.b соответствует aab, acb, a1b и т.д.
2) $
— Описание: Ограничение справа; соответствует концу строки.
— Пример: abc$ соответствует строке, оканчивающейся на abc.
3) ^
— Описание: Ограничение слева; соответствует началу строки.
— Пример: ^abc соответствует строке, начинающейся с abc.
4) *
— Описание: Соответствует предыдущему символу (или группе символов) 0 или более раз.
— Пример: ab*c соответствует ac, abc, abbc и т.д.
5) +
— Описание: Соответствует предыдущему символу (или группе символов) 1 или более раз.
— Пример: ab+c соответствует abc, abbc, abbbc и т.д.
6) []
— Описание: Диапазон значений; соответствует любому одному символу внутри скобок.
— Пример: [a-z] соответствует любой строчной букве от a до z.
7) \
— Описание: Экранирование; используется для обозначения специальных символов как обычных.
— Пример: \. соответствует точке, \\ соответствует обратной косой черте.
8) ()
— Описание: Группа; используется для группировки символов и создания подмасок.
— Пример: (abc)+ соответствует abc, abcabc, abcabcabc и т.д.
9) [0-9]
— Описание: Заменяет любую цифру от 0 до 9.
— Пример: [0-9] соответствует любой цифре.
10) [a-z]
— Описание: Заменяет любую букву из латинского алфавита.
— Пример: [a-z] соответствует любой строчной букве.
11) #
— Описание: Комментарий; все, что расположено после символа #, считается комментарием.
Примеры использования
1. Пример регулярного выражения для URL перезаписи:
*Описание: Перенаправляет URL products/123 на product.php?id=123.
Здесь:
- ^ указывает на начало строки.
- products/ — фиксированная часть URL.
- ([0-9]+) — одна или более цифр, захваченных как группа (переменная).
- $ указывает на конец строки.
- $1 — ссылка на первую захваченную группу (цифры).
2. Пример использования экранирования:
*Описание: Перенаправляет URL page.html на page.php.
Здесь:
- \. экранирует точку, чтобы она рассматривалась как символ точки, а не любой символ.
3. Пример с диапазонами и группами:
*Описание: Перенаправляет URL category/123 на category.php?name=category&id=123.
Здесь:
- ^ указывает на начало строки.
- ([a-z]+) — одна или более строчных букв, захваченных как первая группа.
- / — фиксированный символ слэша.
- ([0-9]+) — одна или более цифр, захваченных как вторая группа.
- $ указывает на конец строки.
- $1 и $2 — ссылки на захваченные группы (буквы и цифры).
Эти символы и операторы помогут вам эффективно использовать регулярные выражения для управления URL и другими аспектами конфигурации веб-сервера в файле .htaccess.
Основная настройка для файла .htaccess
Скопируйте этот код, замените primer на ваше доменное имя и сохраните в файле конфигурации.
Options +FollowSymLinks
RewriteEngine On
# Перенаправление с домена primer.au
RewriteCond %{HTTP_HOST} ^primer\.au$ [NC]
RewriteRule ^(.*)$ http://primer.au/$1 [R=301,L]
# Перенаправление с index.php на главную страницу
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP
RewriteRule ^index\.php$ http://as-pushkin.au/ [R=301,L]
# Удаление завершающего слэша в URL
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ /$1 [R=301,L]
ПРАВИЛА ИСПОЛЬЗОВАНИЯ ФАЙЛА .HTACCESS
1. Создавайте резервные копии: Прежде чем вносить изменения или начинать работу с файлом .htaccess, обязательно создайте резервную копию. Это позволит вернуть исходные настройки в случае необходимости.
2. Указание пути к файлам: Пути к файлам должны быть указаны от корня. Пример:
3. Прописка доменов: Домены указываются с протоколом. Пример:
4. Имя файла: Не забывайте про точку перед названием файла .htaccess (это часть имени файла).
5. Комментарии: Комментарии в файле прописываются с помощью символа #. Используйте их, чтобы другие оптимизаторы или разработчики понимали назначение тех или иных директив. Пример:
.htaccess для SEO: стандартные методы использования
Следует помнить, что настройка только файла .htaccess не завершает оптимизацию вашего сайта. Этот файл лишь инструмент, используемый оптимизатором. Для полноценного технического функционирования сайта требуется провести полный технический аудит.
Кроме того, настройки могут различаться в зависимости от движка сайта и сервера. Например, одно и то же правило переадресации может работать на одном сервере, но не работать на другом из-за различий в их настройках. В статье приведены примеры настроек .htaccess, некоторые из которых могут не сработать в вашем конкретном случае. Поэтому важно подобрать собственный рабочий вариант, и для удобства некоторые способы представлены в двух вариантах.
Выбор основного зеркала
Прежде чем приступать к продвижению сайта, нужно решить, какой именно адрес вы будете оптимизировать: с WWW (http://www.primer.ua) или без WWW (http://primer.ua). Без этого шага поисковые системы могут самостоятельно выбрать основное зеркало сайта, что приведет к появлению дублированных страниц в индексе.
Основное зеркало сайта — это выбранное полное доменное имя, которое считается главным, так как именно оно отображается в результатах поисковой выдачи.
Если вы не уверены в правильности настройки основного зеркала или еще не настраивали его, рекомендуем выполнить следующие действия:
- Перейдите в поисковую систему.
- Введите адрес вашего сайта.
- Проанализируйте результаты выдачи, чтобы определить, какое зеркало сайта было присвоено.
Результат, отображаемый в браузере в нижней строке, укажет на основное зеркало сайта, которое поисковая система назначила по умолчанию.
Иногда сайт может открываться как по адресу http://www.primer.ua, так и по адресу http://primer.ua, что создает проблему наличия двух дублей для главной страницы. Это свидетельствует о дублировании контента, которое касается не только главной страницы, но и всех вложенных категорий и подкатегорий (URL-страниц сайта). Такое дублирование может замедлить индексацию проекта, особенно если сайт многостраничный. Дополнительно, естественные ссылки будут размещаться по-разному, что снизит их эффективность. Решение одно — избавиться от второстепенного зеркала, используя редирект в файле .htaccess.
Итак, приступим к самой простой задаче с файлом .htaccess:
Определите, как вы хотите, чтобы пользователи и поисковые системы видели ваш проект: с WWW или без WWW.
При выборе домена для продвижения сайта, будь то с WWW или без него, важно помнить, что ни один из этих вариантов не имеет приоритетов в SEO! Существует мнение, что домен без WWW воспринимается поисковыми ботами как домен второго уровня, что якобы лучше для SEO. Однако, на самом деле, домен с WWW, хотя и является доменом третьего уровня, никак не влияет на SEO оптимизацию сайта. Таким образом, вебмастер или владелец сайта может выбрать основной домен по своему усмотрению. Единственным негласным преимуществом является то, что домен без WWW короче на три символа. Если у сайта уже есть история оптимизации с использованием внешних методов (например, закупка ссылок), лучше выбирать основное зеркало на основе количества ссылок. Определить количество ссылок можно с помощью любого доступного сервиса.
Мнение SEO-специалиста (совет от практикующего интернет-маркетолога, занимающегося оптимизацией сайтов для поисковых систем)
Не забудьте использовать не только файл .htaccess, но и инструменты для вебмастеров различных поисковых систем. С их помощью можно указать основное зеркало. Для этого понадобятся Google Search Console (google.com/webmasters).
В кабинете вебмастера Google выполните следующие шаги для назначения основного зеркала. Сначала добавьте два ресурса, например, primer.ua и www.primer.ua.
После добавления обоих ресурсов, необходимо подтвердить их одним из предложенных способов. Например:
После подтверждения обоих вариантов домена, нажмите на значок шестеренки (настройки) в нижнем левом углу и выберите пункт «Настройки сайта». Это можно сделать независимо от того, какое зеркало отображается в данный момент в аккаунте — с www или без него.
В открывшемся поле выберите нужный вариант зеркала и сохраните изменения. Теперь в инструментах для вебмастеров обеих поисковых систем ваше основное зеркало настроено.
Далее, вам нужно настроить 301-й редирект и файл Robots.txt (HOST), чтобы окончательно указать поисковикам основное зеркало вашего сайта.
Редирект на "без WWW"
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.primer\.au$ [NC]
RewriteRule ^(.*)$ http://primer.au/$1 [R=301,L]
Редирект на "с WWW"
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^primer\.au$ [NC]
RewriteRule ^(.*)$ http://www.primer.au/$1 [R=301,L]
*Обязательно замените указанные домены в примерах на ваш собственный адрес!
Для использования этих настроек убедитесь, что в httpd.conf подключен модуль mod_rewrite и включена опция FollowSymLinks. На большинстве хостингов этот модуль включен по умолчанию.
Редирект без слеша на конце
Еще одна проблема с дублированием — это открытие страниц как со слешем, так и без слеша в конце URL. Например, страницы могут открываться по следующим адресам:
- https://primer.au/contact/
- https://primer.au/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,» является стандартным кодом ответа, который сервер отправляет, когда запрашиваемый ресурс был постоянно перемещен на новое местоположение. Этот код указывает, что текущие ссылки, использующие данный URL, должны быть обновлены.
Если у вас ситуация, когда страница имеет некорректный адрес и появляется в результатах поиска по ряду запросов, и вы хотите исправить её на более привлекательный адрес, вам понадобится редирект страницы на новый URL:
Например, перенаправление с https://primer.аu/cont на https://primer.аu/contact
В этом случае просто добавьте следующий код в .htaccess:
Redirect 301 /cont https://primer.аu/contact
Другой способ выполнения постраничного редиректа — это переадресация через PHP. Этот метод полезен, если сайт работает на самописной CMS или если нет возможности использовать .htaccess, а сайт состоит из множества .php страниц. Для переадресации со старого URL на новый добавьте в начало файла следующий код:
header(«HTTP/1.1 301 Moved Permanently»);
header(«Location: https://primer.аu/test.html»);
exit();
Если у вас много редиректов на PHP, лучше создать отдельный файл, содержащий все правила. Вот пример такого файла:
if ($_SERVER[‘REQUEST_URI’] == ‘/old-url-1/’) {
header(«HTTP/1.1 301 Moved Permanently»);
header(«Location: https://primer.au/new-url-1/»);
exit();
}
if ($_SERVER[‘REQUEST_URI’] == ‘/old-url-2/’) {
header(«HTTP/1.1 301 Moved Permanently»);
header(«Location: https://primer.au/new-url-2/»);
exit();
}
Вы можете написать столько правил, сколько необходимо, и организовать их синтаксически любым удобным способом. Не забудьте подключить созданный файл к вашему сайту.
Постраничный редирект на такую же страницу другого домена (через PHP):
$ref = $_SERVER[«QUERY_STRING»];
if ($ref != «») $ref = «?» . $ref;
header(«HTTP/1.1 301 Moved Permanently»);
header(«Location: https://primer.au/» . $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\.аu
RewriteRule ^(.*)$ http://new-primer.аu/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^www.old-primer\.аu
RewriteRule ^(.*)$ http://new-primer.аu/$1 [R=301,L]
После этого не забудьте внести изменения в файл Robots.txt, добавив следующий код:
User-agent: Google
Host: new-primer.аu
User-agent: *
Disallow:
Sitemap: http://new-primer.аu/sitemap.xml
Перенос сайта на другую CMS и редирект
При переносе сайта на новую систему управления (CMS) страницы могут иметь другие расширения. Например, адреса могут измениться с http://primer.аu/okna.html на http://primer.аu/okna.php.
Для этого используйте следующий редирект:
RedirectMatch 301 (.*)\.html$ http://primer.аu$1.php
Редирект с index.php на корень сайта
Для редиректа с http://primer.аu/index.php на http://primer.аu используйте следующее регулярное выражение:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://primer.аu/ [R=301,L]
Настройка файла .htaccess для домена (кириллические URL-адреса)
Работа с редиректами .htaccess для кириллических доменов, таких как .SA и .AУ, может быть сложной, так как эти домены являются частью IDN-доменов. Например, сайт.РП. Для таких доменов нужно перевести их в Punycode, используя бесплатный 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 (.*
Редирект с 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
Пример того, как индексный файл выглядит в каталоге сайта:
Определение кодировки для загружаемых файлов
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]
Обработка PHP-кода в HTML-страницах
Чтобы заставить HTML-страницы обрабатывать PHP-код, используйте следующий код:
RemoveHandler .php .htm .html
AddHandler application/x-httpd-php .php .htm .html
Размещение двух или более сайтов на одном виртуальном хостинге
RewriteEngine On
RewriteRule ^newdirectory/ — [L]
RewriteCond %{HTTP_HOST} (www.)?newdomain.аu [NC]
RewriteRule (.*) newdirectory/$1 [L]
Где:
- newdirectory/ — папка, в которой будет размещен второй сайт.
- newdomain.аu — домен, для которого настраивается перенаправление.
Обратите внимание, что при этом будет использоваться единый почтовый аккаунт. Например, если у вас есть ящик admin@domain.аu, то после подключения домена newdomain.au у этого ящика появится второе имя — admin@newdomain.au. При создании любого нового ящика (например, info), ему автоматически присваиваются два имени — info@domain.au и info@newdomain.au.
Удаление "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. Для реализации перехода на мобильную версию только с главной страницы основного домена, используйте следующий код:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.primer\.com$ [NC]
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^$ http://m.primer.com/ [R=302,L]
Этот код обеспечит перенаправление пользователей на мобильную версию сайта при доступе к главной странице основного домена.
Редирект на мобильную версию сайта (Непроверенная версия)
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
Сохранение (загрузка) файлов вместо открытия
Чтобы браузер не открывал, а сохранял файлы определенных типов, используйте следующий код:
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]
Удаление переменных PHP из запроса (вырезание из URI всего, что находится после знака вопроса)
RewriteRule (.*) $1? [R=301,L]
Запрет входа на сайт через .htaccess
Запрет доступа для Internet Explorer (или для тех, кто себя так определяет) и пользователей с определенного IP-адреса:
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]
Запрет отображения содержимого директории, если нет индексного файла
Options -Indexes
Перенаправление с HTTPS на HTTP
RewriteCond %{HTTPS} on
RewriteRule ^.*$ http://%{SERVER_NAME}%{REQUEST_URI}
Редиректы в зависимости от времени
Использование временных условий для редиректов:
RewriteCond %{TIME_HOUR}%{TIME_MIN} >0700
RewriteCond %{TIME_HOUR}%{TIME_MIN} <1900
RewriteRule ^foo\.html$ foo.day.html
RewriteRule ^foo\.html$ foo.night.html
Редирект в URL с подчеркивания на дефис
RewriteRule ^(.+)(\s|_)(.+)$ /$1-$3 [R=301,L]
Редирект в URL с больших букв на маленькие
RewriteRule [A-Z] — [E=HASCAPS:TRUE,S=1]
RewriteRule ![A-Z] — [S=28]
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
RewriteRule [A-Z] — [N]
RewriteCond %{ENV:HASCAPS} TRUE
RewriteRule ^/?(.*) /$1 [R=301,L]
Массовый редирект новых файлов
Создайте таблицу соответствия в базе данных, которая будет содержать старый ID и новый URL для редиректа. Затем добавьте следующую строку в .htaccess:
RewriteRule ^/product-(.*)_([0-9]+).php /redirectold.php?productid=$2
Создайте PHP-файл redirectold.php для поддержания 301 редиректа:
<?php
function getRedirectUrl($productid) {
$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;
$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 ответ с новой ссылкой.
Красивый листинг каталогов
Options +Indexes
IndexOptions +Charset=UTF-8 +FancyIndexing +IgnoreCase +FoldersFirst +XHTML +HTMLTable +SuppressRules +SuppressDescription +NameWidth=* +IconsAreLinks
IndexHeadInsert «<meta name=’viewport’ content=’width=device-width, initial-scale=1′ />»
IndexIgnore .htaccess /listing
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/*
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
Изменяя файл .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 для 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>

