Как исправить htaccess

Спорим, о некоторых вы не подозревали. Мы собрали варианты применения .htaccess для улучшения работы сайта. Он часто используется оптимизаторами для корректной...

19 полезных возможностей файла .htaccess

Спорим, о некоторых вы не подозревали. Мы собрали варианты применения .htaccess для улучшения работы сайта. Он часто используется оптимизаторами для корректной настройки 301 редиректов. Но этим возможности файла не ограничиваются. Тут и безопасность, и оптимизация, и параметры отображения — с помощью .htaccess вебмастер может сделать много полезного, чтобы сайт работал корректно.

Файл .htaccess (сокращение от «hypertext access») переопределяет настройки самого популярного типа веб-серверов Apache и его аналогов. Ниже — способы применения .htaccess для разных целей с примерами кода.

Зачем нужен .htaccess и где его искать

Файл нужен для более гибкой настройки сервера под задачи оптимизатора. Задавать правила в .htaccess не стоит, если у вас есть доступ к главному конфигурационному файлу сервера .httpd.conf или apache.conf (название зависит от настроек операционной системы). Изменения в нем вступают в силу быстрее, запросы не перегружают сервер. Однако очень часто такого доступа нет, например, в случае с виртуальным хостингом. Тогда приходится прописывать нужные настройки через .htaccess.

Возможности .htaccess для оптимизации сайта:

  • Настройка редиректов для SEO.
  • Обеспечение безопасности ресурса в целом и отдельных разделов.
  • Настройка корректного отображения сайта.
  • Оптимизация скорости загрузки.

Где искать и как редактировать

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

.htaccess — общепринятое и самое популярное название, но не обязательное (оно задается в файле httpd.conf). Несмотря на непривычное название, создавать и редактировать файл можно в любом текстовом редакторе.

Некоторые CMS дают возможность редактировать файл через административную панель. В Битриксе его легко можно найти в разделе Контент — Файлы и папки:

19 полезных возможностей файла .htaccess

В WordPress редактировать .htaccess можно с помощью модулей плагинов Yoast SEO и All in One SEO Pack.

Если файл .htaccess отсутствует, создайте его в текстовом редакторе и разместите в корневой папке сайта или в нужном каталоге (потребуется доступ к хостингу или по ftp).

Синтаксис .htaccess

Синтаксис файла простой: каждая директива (команда) начинается с новой строки, после знака # можно добавлять комментарии, которые не будут учитываться сервером. Изменения на сайте вступают в силу сразу, перезагрузка сервера не требуется.

Правила задаются в том числе при помощи регулярных выражений. Для того, чтобы их прочитать, нужно понимать значение спецсимволов и переменных. Расшифруем самые часто используемые.

Основные спецсимволы:

  • ^ — начало строки;
  • $ — конец строки;
  • . — любой символ;
  • * — любое количество любых символов;
  • ? — один определенный символ;
  • [0-9] — последовательность символов, например, от 0 до 9;
  • | — символ «или», выбирается или одна группа, или другая;
  • () — иcпользуется для выбора групп символов.

Основные переменные:

  • %{HTTP_USER_AGENT} — поле User-Agent, которое передает браузер пользователя;
  • %{REMOTE_ADDR} — IP адрес пользователя;
  • %{REQUEST_URI} — запрашиваемый URI;
  • %{QUERY_STRING} — параметры запроса после знака ?.

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

Настраиваем редиректы для SEO

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

При настройке 301 редиректов помните о двух правилах:

  1. Избегайте нескольких последовательных перенаправлений — они увеличивают нагрузку на сервер и снижают скорость работы сайта.
  2. Располагайте редиректы от частных к глобальным. Например, сначала переадресация с одной страницы на другую, затем общий редирект на страницы со слешем. Это правило работает не в 100% случаев, поэтому с размещением директив нужно экспериментировать.

1. Настраиваем постраничные 301 редиректы

Это потребуется в следующих случаях:

  • изменилась структура сайта и у страницы поменялся уровень вложенности;
  • страница перестала существовать, но нужно сохранить ее входящий трафик (например, в случае отсутствия товара обычно делают переадресацию на товарную категорию);
  • поменялся URL, что крайне нежелательно, но тоже встречается.

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

Redirect 301 /page1/  https://mysite.com/page2/

  • /page1/ — адрес страницы от корня, без протокола и домена. Например, /catalog/ofisnaya-mebel/kompjuternye-stoly/.
  • https://mysite.com/page2/ — полный адрес страницы перенаправления, включая протокол и домен. Например, https://dom-mebeli.com/ofisnaya-mebel/stoly-v-ofis/.

2. Избавляемся от дублей

Каждая страница сайта должна быть доступна только по одному адресу. Для этого должны быть настроены:

  • редирект на страницы со слешем в конце URL или наоборот;
  • главное зеркало — основной адрес сайта в поиске.

Сделать это можно при помощи модуля mod_rewrite. В его составе используются специальные команды — директивы сложного перенаправления. Первой командой всегда идет включение преобразования URL:

RewriteEngine On

Переадресация на слеш или наоборот

Настроить ли переадресацию на страницы со слешем или без, в каждом случае нужно решать индивидуально. Если у сайта уже накоплена история в поиске, анализируйте, каких страниц в индексе больше. Для новых сайтов обычно настраивают редирект на слеш. Проверить, не настроена ли переадресация по умолчанию, просто: удалите/добавьте слеш в конце URL. Если страница перезагрузится с новым адресом — мы имеем дубли, требуется настройка. Если URL подменяется — все в порядке. Проверять лучше несколько уровней вложенности.

Код 301 редиректа на слеш:

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

Код 301 редиректа на страницы без слеша:

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

3. Настраиваем главное зеркало

Для начала нужно определиться, какой адрес будет являться основным для поиска. SSL-сертификат давно уже мастхэв. Просто установите его и добавьте правило в .htaccess. Не забудьте также прописать его в robots.txt.

Редирект на HTTPS

RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

Определять, с «www» или без будет главное зеркало, можно несколькими способами:

  • добавить сайт в Яндекс.Вебмастер в двух вариантах, в консоли отобразится информация, какой URL поисковик считает главным зеркалом;
  • проанализировать выдачу и посмотреть, каких страниц сайта больше в индексе;
  • для нового ресурса не имеет значения, с «www» или без будет адрес, выбор за вами.

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

Редирект с www на без www

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

Редирект с без www на www

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www..* [NC]
RewriteRule ^(.*) http://www.%{HTTP_HOST}/$1 [R=301]

4. Перенаправляем с одного домена на другой

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

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

RewriteEngine On
RewriteRule ^(.*)$ http://www.mysite2.com/$1 [R=301,L]

или

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.mysite1.ru$ [NC]
RewriteRule ^(.*)$ http://www.mysite2.ru/$1 [R=301,L]

Не забудьте поменять в коде «mysite1» и «mysite2» на старый и новый домен соответственно.

Модуль SEO в системе Promopult: для тех, кто не хочет тонуть в рутине. Все инструменты для улучшения качества сайта и поискового продвижения, автоматизация процессов, чек-листы, подробные отчеты.

Обеспечиваем безопасность сайта

Файл .htaccess предоставляет большие возможности для защиты сайта от вредоносных скриптов, кражи контента, DOS-атак. Также можно защитить доступ к определенным файлам и разделам.

5. Запрещаем загрузку картинок с вашего сайта

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

Осадите воришек при помощи этого кода:

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

Заменяете «mysite.com» на адрес вашего сайта и создаете изображение с любым сообщением о том, что красть чужие картинки нехорошо, по адресу https://mysite.com/img/goaway.gif. Это изображение и будет показано на стороннем ресурсе.

6. Запрещаем доступ

Целым группам нежелательных гостей с определенных IP-адресов, подсетей, а также вредоносным ботам можно запретить доступ на ваш ресурс при помощи следующих директив в .htaccess.

Для нежелательных 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>

Список юзер-агентов можно дополнять, сокращать или создать свой. Перечень хороших и плохих ботов можно посмотреть здесь.

Частный случай такого запрета — запрет для поисковых роботов. Если вас почему-то не устраивает правило в robots.txt, можно запретить доступ, например, роботу Google при помощи таких директив:

RewriteEngine on
RewriteCond %{USER_AGENT} Googlebot
RewriteRule .* - [F]

Для всех, кроме указанных IP

ErrorDocument 403 https://mysite.com
Order deny,allow
Deny from all
Allow from IP1
Allow from IP2 и т. д.

Не забываем заменить «https://mysite.com» на адрес вашего сайта и вписать IP-адреса вместо IP1, IP2 и т.д.

Для определенных IP-адресов

allow from all
deny from IP1
deny from IP2 и т. д.

Для подсети

allow from all
deny from 192.168.0.0/24

Вписываем маску сети в строку после «deny from».

Спамные IP-адреса можно вычислить в логах сервера или с помощью сервисов статистики. В административной панели WordPress отображаются IP-адреса комментаторов:

19 полезных возможностей файла .htaccess

К определенному файлу

<files myfile.html>
order allow,deny
deny from all
</files>

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

Не лишним будет ограничить доступ к самому файлу .htaccess из соображений безопасности, а также рекомендуем после настройки всех правил поставить на файл права доступа 444.

<Files .htaccess>
order allow,deny
deny from all
</Files>

Для сайтов на WordPress важно ограничить доступ к файлу wp-config.php, т.к. в нем содержится информация о базе данных:

<files wp-config.php>
order allow,deny
deny from all
</files>

Для пользователей, пришедших с определенного сайта

Вы можете заблокировать посетителей с нежелательных ресурсов (например, со взрослым или шокирующим контентом).

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

7. Защищаем доступ к определенному файлу или папке

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

Защита паролем файла

<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

Вместо «/pub/home/.htpasswd» укажите путь до файла .htpasswd от корня сервера. Рекомендуем проверить доступ после установки кода.

8. Запрещаем выполнение вредоносных скриптов

Следующая группа директив защищает сайт от так называемых «скриптовых инъекций» — инструмента хакерских атак:

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 «доступ запрещен».

9. Защищаем сайт от DOS-атак

Один из способов защиты — ограничить максимально допустимый размер запроса (ограничение отсутствует по умолчанию).

Для этого прописываем в .htaccess размер загружаемых файлов в байтах:

LimitRequestBody 10240000

В примере указан размер 10 Мбайт. Если вы хотите запретить загрузку файлов, пропишите число меньше 1 Мбайт (1048576 байт).

Также можно изучить возможности директив LimitRequestFields, LimitRequestFieldSize и LimitRequestLine в официальной документации.

Настраиваем отображение сайта

Посмотрим, что можно сделать с отображением всего ресурса или его разделов в браузерах пользователей при помощи .htaccess.

10. Заменяем индексный файл

Индексный файл — тот, что открывается по умолчанию при обращении к определенному каталогу. Обычно они называются: index.html, index.htm, index.php, index.phtml, index.shtml, default.htm, default.html.

Вот как это выглядит в структуре каталога:

19 полезных возможностей файла .htaccess

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

DirectoryIndex hello.html

Вместо «hello.html» вписывайте адрес желаемого файла.

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

DirectoryIndex hello.html hello.php hello.pl

11. Добавляем или убираем html в конце URL

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

Чтобы добавить .html:

RewriteCond %{REQUEST_URI} (.*/[^/.]+)($|?)
RewriteRule .* %1.html [R=301,L]
RewriteRule ^(.*)/$ /$1.html [R=301,L]

Чтобы убрать .html:

RewriteBase /
RewriteRule (.*).html$ $1 [R=301,L]

Этими же директивами можно добавить/убрать расширение php.

12. Настраиваем кодировку

Чтобы избежать ошибок в отображении ресурса браузером, нужно сообщить ему, в какой кодировке создан сайт. Самые популярные:

  • UTF-8 — универсальная
  • Windows-1251 — кириллица
  • Windows-1250 — для Центральной Европы
  • Windows-1252 — для Западной Европы
  • KOI8-R — кириллица (КОИ8-Р)

Чаще всего используют UTF-8 и Windows-1251.

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

Пример директивы, которая задает для файла кодировку UTF-8:

AddDefaultCharset UTF-8

А такая команда означает, что все загружаемые на сервер файлы будут преобразованы в Windows-1251:

CharsetSourceEnc WINDOWS-1251

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

13. Создаем кастомные страницы ошибок

При помощи правил в .htaccess можно настроить отображение специально созданных страниц для самых популярных ошибок, например:

ErrorDocument 401 /error/401.php
ErrorDocument 403 /error/403.php
ErrorDocument 404 /error/404.php
ErrorDocument 500 /error/500.php

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

Зачем это нужно? Например, чтобы не потерять пользователя на странице 404, а дать ему возможность перейти в другие разделы сайта:

19 полезных возможностей файла .htaccess

Оптимизируем работу сайта

Скорость загрузки сайта — один из факторов ранжирования в поисковых системах. Увеличить ее можно в том числе с помощью директив в .htaccess.

14. Сжимаем компоненты сайта при помощи mod_gzip или mod_deflate

Сжатие файлов, с одной стороны, увеличивает скорость загрузки сайта, но с другой — больше нагружает сервер. В .htaccess можно включить сжатие при помощи двух модулей — mod_zip и mod_deflate. Они практически идентичны по качеству сжатия.

Синтаксис модуля Gzip более гибкий и он умеет работать с масками:

<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>

15. Усиливаем кэширование

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

FileETag MTime Size
<ifmodule mod_expires.c>
<filesmatch “.(jpg|gif|png|css|js)$”>
ExpiresActive on
ExpiresDefault “access plus 1 week”
</filesmatch>
</ifmodule>

В примере срок жизни кэша ограничен одной неделей («1 week»), вы можете указать свой срок в месяцах (month), годах (year), часах (hours) и т.д.

Другой вариант кода:

<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType application/javascript "access plus 7 days"
ExpiresByType text/javascript "access plus 7 days"
ExpiresByType text/css "access plus 7 days"
ExpiresByType image/gif "access plus 7 days"
ExpiresByType image/jpeg "access plus 7 days"
ExpiresByType image/png "access plus 7 days"
</IfModule>

Для кэширования доступны следующие типы файлов:

  • 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.

Еще несколько возможностей

16. Управляем настройками php

Этот комплекс настроек выполняют программисты, если нет доступа к файлу php.ini. Остановимся на выражениях php_value, которые отвечают за объем загружаемых на сайт данных и время обработки скриптов, т.к. это напрямую влияет на производительность.

<ifModule mod_php.c>
  php_value	upload_max_filesize	125M
  php_value	post_max_size		20M
  php_value	max_execution_time 60
</ifModule>

В строке «upload_max_filesize» указываете максимальный размер загружаемых файлов в мегабайтах, «post_max_size» означает максимальный объем постинга, «max_execution_time» указывает время в секундах на обработку скриптов.

17. Боремся со спам-комментариями на WordPress

Для того, чтобы перекрыть доступ спамерам к файлу wp-comments-post.php, добавьте эти директивы в .htaccess:

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

Вместо «mysite.com» впишите адрес вашего сайта.

18. Устанавливаем e-mail для администратора сервера

Этот код в .htaccess установит e-mail администратора по умолчанию. На него будут приходить уведомления, связанные с важными событиями на сервере.

ServerSignature EMail
SetEnv SERVER_ADMIN admin@mysite.com

19. Предупреждаем о недоступности сайта

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

RewriteEngine on
RewriteCond %{REQUEST_URI} !/info.html$
RewriteCond %{REMOTE_HOST} !^12.345.678.90
RewriteRule $ https://mysite.ru/info.html [R=302,L]

IP-адрес в примере (12.345.678.90) замените на свой, в последней строке укажите адрес страницы вашего ресурса с информацией о характере и сроках завершения работ.

Общие правила работы с .htaccess

  • Всегда делайте резервную копию файла перед внесением изменений, чтобы оперативно «откатить» их.
  • Вносите изменения пошагово, добавляйте по одному правилу и оценивайте, как оно сработало.
  • Если размещаете несколько файлов .htaccess в разных каталогах, прописывайте в дочерних только новые директивы, которые актуальны для конкретного каталога, остальные унаследуются от родительского каталога или файла в корневой папке.
  • Очищайте кэш браузера: Ctrl + F5, в Safari: Ctrl + R, в Mac OS: Cmd + R.
  • Если возникает ошибка 500, проверьте синтаксис правила (нет ли опечатки). Можно воспользоваться сервисами проверки файла .htaccess онлайн, например таким. Если ошибок не найдено, значит в главном конфигурационном файле такой тип директивы запрещен, придется обратиться за консультацией к программисту и хостинг-провайдеру.
  • В директивах .htaccess кириллические символы не допускаются. Если необходимо указать адрес кириллического домена (мойсайт.рф), воспользуйтесь любым whois-сервисом, чтобы узнать его написание по методу punycode. Например, адрес «сайт.рф» будет выглядеть как «xn--80aswg.xn--p1ai/$1».
  • Слишком большое количество директив в .htaccess может снизить работоспособность сайта. Старайтесь использовать файл только в том случае, если другим путем задачу решить нельзя.
  • Если нет времени подробно изучать особенности директив, воспользуйтесь генератором .htaccess.

.htaccess — это конфигурационный файл веб-сервера Apache, позволяющий управлять работой веб-сервера и настройками сайта с помощью различных параметров (директив) без изменения основного конфигурационного файла веб-сервера.

На хостинге RU-CENTER в настоящее время используется веб-сервер Apache версии 2.4.

Директивы файла .htaccess действуют для каталога, в котором размещён такой файл, и для всех его подкаталогов. Если вы желаете с помощью .htaccess изменить настройки для сайта в целом, его следует размещать в корневом каталоге сайта  ~/ваш_домен/docs.

Пожалуйста, будьте внимательны при редактировании файла .htaccess! При сохранении такого файла в кодировке UTF-8 в нём не должно присутствовать BOM-сигнатуры. Для редактирования файла .htaccess и других конфигурационных файлов мы рекомендуем использовать не «Блокнот» Windows, а специальные текстовые редакторы, например Notepad++.

1. Перенаправление доменов c синонима сайта на основной домен с кодом 301

Перенаправить запросы на domain.ru с любого из синонимов сайта

RewriteEngine On
RewriteCond %{HTTP_HOST} !^domain.ru$ [NC]
RewriteRule ^(.*)$ http://domain.ru/$1 [L,R=301]

Перенаправить запросы на www.domain.ru с любого из синонимов сайта

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

Эти правила рекомендуется размещать в самом начале файла .htaccess.

2. Постоянное перенаправление с кодом 301

Если вы изменили адрес страницы сайта, добавьте в .htaccess следующие строки, чтобы запросы со старого адреса переадресовывались на новый

Redirect 301 /page.html http://www.domain.ru/new_page.html

где:

  • page.html — адрес старой страницы относительно корня сайта;
  • www.domain.ru — имя сайта;
  • new_page.html — адрес страницы, на которую нужно выполнить перенаправление.

Подобное правило не сработает для перенаправления с адресов, содержащих Query String (символы после ?). Для запросов, содержащих QUERY_STRING, можно использовать сочетание RewriteCond и RewriteRule.

Например, для перенаправления всех запросов к странице /period/?test=123 вашего сайта на domain.ru, вы можете написать:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{QUERY_STRING} ^test=123$ [NC]
RewriteRule ^period/$ http://domain.ru/ [L,R=301]

3. Переопределение страниц ошибок

При помощи файла .htaccess вы можете установить свои страницы ошибок:

#401 Авторизация не выполнена
ErrorDocument 401 http://domain.ru/errors/401.html
#403 Доступ запрещен
ErrorDocument 403 http://domain.ru/errors/403.html
#404 Страница не найдена
ErrorDocument 404 http://domain.ru/errors/404.html
#500 Внутренняя ошибка сервера
ErrorDocument 500 http://domain.ru/errors/500.html

Соответствующие файлы страниц ошибок (401.html, 404.html и др.) необходимо разместить в каталоге ~/ваш_домен/docs/errors.

Для того чтобы при случайном упоминании прямых ссылок на такие страницы они не проиндексировались в поисковых системах, рекомендуется:

a) в файле ~/ваш_домен/docs/robots.txt прописать

User-agent: *
Disallow: /errors

b) создать файл ~/ваш_домен/docs/errors/.htaccess, в котором прописать

Options -Indexes

4. Постраничное перенаправление запросов на другой домен c кодом 301

Следующий код перенаправит все запросы к страницам вашего сайта на аналогичные страницы другого сайта, например, запрос http://domain.ru/main будет переадресован на http://www.newdomain.ru/main:

Redirect 301 / http://www.newdomain.ru/

либо

RewriteEngine On
RewriteRule ^(.*)$ http://newdomain.ru/$1 [R=301,L]

5. Ограничение доступа к сайту по IP

Запретить доступ к сайту с IP-адресов 123.4.5.6 и 123.5.4.3

Order Allow,Deny
Allow from all
Deny from 123.4.5.6 123.5.4.3

Запретить доступ к сайту со всех адресов кроме 123.4.5.6 и 123.5.4.3:

Order Deny,Allow
Deny from all
Allow from 123.4.5.6 123.5.4.3

Запретить доступ к сайту для всех:

Deny from all

6. Переопределение главной страницы сайта (индексного файла каталога)

Сделать главной страницей файл menu.html:

DirectoryIndex menu.html

7. Включение обработки PHP в .html-файлах

RemoveHandler .html .htm
AddType application/x-httpd-php .php .htm .html .phtml

8. Запрет выдачи листинга каталога

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

Options -Indexes

9. Включить выполнение CGI-скриптов в папке docs для файлов с расширениями .cgi, .pl. .py

В папке c CGI-скриптами необходимо разместить файл .htaccess с содержимым:

AddHandler cgi-script .cgi .pl .py
Options +ExecCGI

Скрипт должен иметь атрибут исполнения (+x, права доступа, начинающиеся с 7, например, 755).

Атрибуты (права доступа) можно изменить с помощью файлового менеджера панели управления, при помощи вашего FTP-клиента или по SSH. Также в разделе Веб-серверУправление модулями должен быть включен модуль CGI.

10. Блокировка переходов со сторонних ресурсов

Для запрета перехода c baddomain.ru на domain.ru добавьте в .htaccess следующее:

RewriteEngine on
RewriteCond %{HTTP_REFERER} baddomain.ru [NC]
RewriteRule .* - [F]

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

RewriteEngine on
RewriteCond %{HTTP_REFERER} baddomain.ru [NC,OR]
RewriteCond %{HTTP_REFERER} baddomain2.ru [NC,OR]
RewriteCond %{HTTP_REFERER} baddomain3.ru [NC]
RewriteRule .* - [F]

11. Особенности использования кириллических доменов (.РФ, .МОСКВА и др.)

В файле .htaccess использование кириллицы не допускается. При составлении правил перенаправления для кириллических доменов необходимо указывать имя домена в punycode. Узнать имя домена в punycode можно с помощью сервиса Whois.

Например, для перенаправления site.ru на caйт.рф нужно воспользоваться следующим правилом:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.site.ru [NC]
RewriteRule ^(.*)$ http://xn--80aswg.xn--p1ai/$1 [R=301,L]

В этом случае ваши посетители могут увидеть именно punycode-представление доменного имени в адресной строке браузера. Это не является ошибкой.

12. Перенаправление с HTTP на HTTPS и обратно

Для работы перенаправления на сайте должен быть установлен действительный SSL-сертификат.

Перенаправить запросы на https://domain.ru

RewriteEngine on
RewriteCond %{ENV:HTTPS} !on
RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Перенаправить запросы на http://domain.ru

RewriteEngine on
RewriteCond %{ENV:HTTPS} on
RewriteRule ^.*$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]


3. Диагностика ошибок

Если после редактирования или размещения .htaccess при обращении к сайту вы получили ошибку 500, то, скорее всего, в файле .htaccess допущена ошибка. Посмотреть её причины вы можете в лог-файле /var/log/ваш_домен.error_log.


4. Дополнительная документация и примеры

С подробной документацией вы можете ознакомиться на сайте разработчика веб-сервера Apache: http://httpd.apache.org/docs/2.4/rewrite/

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

Что такое файл .htaccess

.htaccess — это дополнительный конфигурационный (служебный) файл, с помощью которого можно управлять настройками сервера. Он применяется в том случае, если хостинг-провайдер использует программное обеспечение Apache.

Файл .htaccess будет полезен, если ваш сайт размещен на виртуальном хостинге. На нём несколько пользователей делят ресурсы одного сервера. Общие настройки для управления этим сервером закрыты от клиентов, чтобы у них не было возможности влиять на другие сайты. При этом пользователи могут управлять настройками сервера только в рамках своего сайта через создание .htaccess.

Зачем нужен .htaccess

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

  • Починить кодировку. От кодировки (Charset) зависит способ отображения кода в виде печатных символов. К наиболее распространенным кодировкам относятся UTF-8 и Windows-1251. Если тексты на сайте превратились в набор непонятных знаков — значит, на сайте слетела кодировка. Исправить её можно в .htaccess.
  • Настроить редирект. Редирект — это переадресация с одного адреса на другой. Подробнее о назначении редиректов, их типах и настройках мы рассказали в статье. Файл .htaccess позволяет задавать гибкие перенаправления: например, для отдельного IP, со страниц без префикса www на страницы с ним, редиректы для всех страниц, кроме главной и другие.
  • Назначить страницы ошибок. На сайтах встречаются различные ошибки (404 — страница не найдена, 403 — в доступе отказано и т. д.). Тогда пользователь видит страницу с описанием возникшей ошибки. По умолчанию такие страницы практически не оформлены и могут сильно отличаться от дизайна остального сайта. Выход — создать свою красочную страницу ошибки и задать ее появление в .htaccess.
  • Изменить главную страницу. В архитектуре сайта по умолчанию выбрана главная страница (индексный файл), которая отображается первой при открытии сайта. Если вы хотите сделать первой какую-то другую страницу, используйте .htaccess.
  • Включить кэширование файлов. Кэширование позволяет поместить часть статичной информации сайта в кэш. Благодаря этому страницы сайта будут быстрее загружаться в браузерах пользователей. Если настроить кэширование в .htaccess, ускорится работа сайта.
  • Создать ЧПУ. ЧПУ расшифровывается как «человекопонятный URL». Иногда URL-адреса могут быть слишком длинными или содержать численное обозначение страниц. Это негативно влияет на пользовательский фактор, а значит и на SEO-показатели. В .htaccess с помощью одной команды можно назначить для URL латинские символы (или задать другой подходящий способ).
  • Защитить папку паролем. Если сайт содержит папку с конфиденциальной информацией, ей требуется дополнительная защита. Через .htaccess можно настроить базовую аутентификацию по логину и паролю. Это позволит снизить риск взлома и кражи данных.
  • Настроить параметры php. PHP — язык программирования, который используется в разработке большинства сайтов с динамическим контентом. Настраивать PHP можно в файле php.ini, а можно работать с ним как с модулем .htaccess и управлять настройками в одном конфигурационном файле.
  • Ограничить доступ к сайту. В .htaccess можно ограничить доступ к сайту для нежелательных IP, что позволит контролировать доступ, а также отражать хакерские атаки. Например, DDoS-атаку, в момент которой процессор пытаются нагрузить таким количеством запросов, которые он не способен обработать. Как правило, запросы поступают с одного/нескольких IP-адресов. Подробнее: Что такое DDoS-атака.
  • Закрыть доступ к сайту от поисковых ботов. Чтобы сайт отображался в поисковой выдаче, его должны обойти поисковые роботы, которые собирают информацию, необходимую для индексации. Однако некоторые поисковые боты могут быть нежелательны (SolomonoBot и др.). В .htaccess можно ограничить доступ к сайту для нежелательных ботов по User-Agent.

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

Ниже рассмотрим, как создать файл .htaccess на своем компьютере и загрузить его на хостинг.

Как сделать .htaccess в Windows

Если ваш сайт создан с помощью CMS (WordPress, Joomla, 1С Битрикс и других), файл .htaccess будет сгенерирован автоматически. Вы сможете его найти в корневой папке сайта в панели управления хостингом. Как правило, по умолчанию в файле не будет никакой информации, кроме нескольких строк с комментариями.

Обратите внимание! На хостинге с панелью управления cPanel .htaccess и все другие файлы, которые начинаются с точки, по умолчанию скрыты. Чтобы он начал отображаться в корневой папке, следуйте инструкции.

Если же сайт был написан с нуля, а не на CMS, или если файл по какой-то причине был удален, вы можете создать его на компьютере. Чтобы создать файл .htaccess на компьютере с ОС Windows:

  1. 1.

    Откройте программу Блокнот.

  2. 2.

    Нажмите ФайлСохранить как (или используйте комбинацию горячих клавиш Ctrl + Shift + S):

  3. 3.

    В графе «Тип файла» выберите Все файлы. Затем в поле «Имя файла» введите «.htaccess» и нажмите Сохранить:

Если файл сохранился под названием .htaccess.txt, нужно убрать расширение текстовых файлов (.txt). Для этого откройте проводник, перейдите во вкладку Вид и уберите галочку напротив пункта «Расширения имен файлов»:

Интерфейс проводника в Windows 10

Когда файл будет готов, залейте его в корневую папку сайта. Для этого войдите в панель управления и следуйте подходящей инструкции:

  1. 1.

    Перейдите в раздел Менеджер файловwww и выберите домен вашего сайта.

  2. 2.

    Нажмите кнопку Загрузить в панели иконок сверху.

  3. 3.

    Нажмите Выберите файл, найдите на локальном диске созданный файл .htaccess и кликните Ok:

Готово, файл добавлен в «корень» сайта.

Обратите внимание: если вид вашей панели управления отличается от представленного в статье, в разделе «Основная информация» переключите тему с paper_lantern на jupiter.

  1. 1.

    В блоке «Файлы» нажмите Менеджер файлов:

  2. 2.

    Найдите в списке слева корневую папку вашего сайта, кликните по нему и в строке сверху нажмите Загрузить:

  3. 3.

    В открывшемся окне нажмите Выбрать файл и выберите файл .htaccess.

Готово, файл будет загружен.

  1. 1.

    В блоке нужного домена выберите Менеджер файлов:

  2. 2.

    Нажмите в верхней панели Загрузить и откройте созданный файл .htaccess.

Готово, файл будет загружен.

Работа с файлом .htaccess

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

Все конфигурации в .htaccess задаются с помощью директив (или команд). Они включают в себя символы латинского алфавита, %, фигурные и квадратные скобки и другие. Каждая директива состоит из ключа (неизменяемая часть) и значения. Например, директива для изменения главной страницы сайта:

Где DirectoryIndex — ключ, а index.php — значение (страница, которую вы хотите использовать в качестве главной страницы сайта).

Чтобы внести какую-либо директиву в конфигурационный файл вашего сайта:

  1. 1.

    Откройте файл .htaccess в корневой папке. Или создайте новый, если директива должна применяться не ко всему сайту, а к конкретному файлу или папке.

  2. 2.

    Скопируйте нужную директиву и вставьте ее в файл.

  3. 3.

    Замените значение для вашего сайта (нужный домен, страница и т. п.).

  4. 4.

    Сохраните изменения.

Обратите внимание! Не вносите в .htaccess видоизмененные команды, если не уверены в их работе. Повреждение файла может повлечь за собой сбой работы сайта.

Ниже вы найдете директивы для нескольких наиболее распространенных операций в файле .htaccess.

Как запретить доступ к файлу, папке или всему сайту

Когда на сайте идут «ремонтные работы», он функционирует нестабильно. Чтобы в это время на него не заходил никто, кроме разработчиков, можно ограничить доступ к сайту или отдельным файлам.

  • Чтобы закрыть доступ ко всему сайту, добавьте в файл строки:
Order Deny,Allow 
Deny from all
  • Чтобы закрыть доступ к конкретной папке, создайте новый файл .htaccess в этой папке и добавьте в него код выше.
  • Чтобы закрыть доступ от всех посетителей, кроме конкретного IP (через запятую можно указать несколько IP-адресов) введите:
Order Deny,Allow
Deny from all
Allow from 123.123.123.123

Где 123.123.123.123 — IP-адрес, для которого доступ разрешен.

  • Чтобы закрыть доступ к конкретному файлу, создайте новый файл .htaccess в той папке, где находятся нужный файл, и добавьте следующие строки:
<Files example.exe>
Order Deny.Allow
Deny from all
</Files>

Где example.exe — название файла, к которому нужно закрыть доступ.

Как запретить доступ к файлам определенного типа

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

Для этого добавьте следующие строки:

<Files ".(txt|pdf|jpg)$">
Order Deny.Allow
Deny from all
</Files>

Где вместо txt, pdf, jpg — нужные вам расширения.

Как запретить просмотр директорий в .htaccess

Обладая определенными знаниями, любой человек может посмотреть структуру вашего сайта (в первую очередь листинг — список всех каталогов сайта). Чтобы запретить просмотр листинга, можно ввести одну строку в .htaccess:

Чтобы открыть отображение листинга, введите:

Как настроить 301 редиректа для сайта

Мы посвятили настройке редиректов в .htaccess отдельную статью, в которой рассмотрели 10 различных вариаций редиректов.

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

Чтобы сделать редирект, добавьте в .htaccess строки:

RewriteEngine On
RewriteCond %{HTTP_HOST} site1.ru
RewriteRule (.*) http://site2.ru/$1 [R=301,L]

Где site1.ru — исходный домен, site2.ru — целевой домен.

Как включить обработку ошибок

Чтобы установить пользовательские страницы ошибок, нужно воспользоваться директивой ErrorDocument. Добавьте в .htaccess директиву с номером ошибки и адрес созданной страницы:

ErrorDocument 404
http://site.ru/error/404.html

Где:

  • site.ru — домен вашего сайта;
  • error — папка, в которой расположена страница ошибки (если её нет, пропустите это звено);
  • 404.html — название страницы ошибки.

Пример файла .htaccess

Ниже мы приводим пример «боевого» файла .htaccess c комментариями. Комментарии не отображаются в основном коде и используются для пояснений. Чтобы добавить комментарий, поставьте перед строкой шарп (#).

# Закрыт доступ к просмотру листинга (списка директорий) сайта:<head> </head>

# Задана пользовательская страница для ошибки 404:<head> </head>

ErrorDocument 404 /404.php
<IfModule mod_php5.c>

# Настройка параметров php для версии 7.x:<head> </head>

<IfModule mod_php7.c>
  php_flag session.use_trans_sid off
  #php_flag default_charset UTF-8
  #php_value display_errors 1
</IfModule>

# Настройка ЧПУ для 1С-Битрикс:<head> </head>

<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>

# Указание индексного файла:<head> </head>

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

# Включение модуля mod_expires и выставление настроек времени кэширования статических файлов:<head> </head>

<IfModule mod_expires.c>
  ExpiresActive on
  ExpiresByType image/jpeg "access plus 3 day"
  ExpiresByType image/gif "access plus 3 day"
  ExpiresByType image/png "access plus 3 day"
  ExpiresByType text/css "access plus 3 day"
  ExpiresByType application/javascript "access plus 3 day"  
</IfModule>

Итак, мы рассмотрели создание .htaccess (Windows), а также часто используемые директивы, которые нужны для управления сайтом. По инструкциям вы сможете выставить нужные настройки.

Файл .htaccess позволяет изменять некоторые настройки веб-сервера Apache (например, перенаправление) и опции PHP для сайта, поддомена или вложенной директории без изменения конфигурационного файла Apache или php.ini. Директивы, указанные в файле .htaccess, распространяются на саму директорию, в которой находится .htaccess, и на все вложенные, в том числе и на поддомены.

Как правило, файл .htaccess создается в  корневой директории сайта или в тех, которые требуют специфического поведения веб-сервера (запрет отображения списка файлов, обработка статических файлов, авторизация и прочее). Если файл .htaccess отсутствует в корне сайта, создайте его через Файловый менеджер Панели управления или загрузите с локального компьютера при помощи FTP-клиента.

При редактировании файла .htaccess будьте предельно внимательны: неверно указанные директивы и посторонние символы могут привести к внутренней ошибке сервера (500 Internal Server Error).

  • Настройки веб-сервера Apache
  • Конфигурация PHP
  • Другие настройки (Python, Node.js)

Настройки веб-сервера Apache

Перенаправление

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

Redirect 301 / http://example.com/

В случае, если перенаправление носит временный характер, перенаправить запрос со страницы blog на другую страницу того же сайта new-blog можно вот так:

Redirect 302 /blog /new-blog/index.php

Простые правила перенаправления вы можете создавать автоматически при помощи раздела «Перенаправления» в Панели управления хостингом при переходе к управлению сайтом. Более сложные правила (с условиями и дополнительными параметрами) составляются при помощи модуля Apache mod_rewrite. Использование этого модуля позволяет решить широкий спектр задач, примеры некоторых мы рассмотрим ниже.

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

Защита SSL-сертификатом обязывает сайт всегда работать только по протоколу HTTPS. Данное правило перенаправляет запросы, поступившие от посетителей сайта, с HTTP на HTTPS:

RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]

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

Перенаправление на определенное имя сайта (с или без www)

Если у вашего сайта несколько имен, но вы хотите, чтобы пользователи всегда видели в адресной строке определенное имя сайта (в данном примере это www), добавьте в файл .htaccess в корне вашего сайта следующие строки:

RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.example.com$
RewriteRule ^(.*) http://www.example.com/$1 [R=301,L] 

Во второй строке правила содержится условие: все запросы, которые поступили не на имя www.example.com, перенаправлять на www.example.com. Чтобы конкретизировать правило (например, задать определенный домен, а не все, что подходят под условие), достаточно убрать восклицательный знак — он означает отрицание. Например, данное правило перенаправляет запросы с дополнительного домена alias.com на основной сайт site.ru:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^alias.com$
RewriteRule ^(.*) http://site.ru/$1 [R=301,L] 

Избавиться от дублей страниц

Поисковые системы при индексации сайта могут воспринимать ссылки со слешем (косая черта — /) и без него как разные страницы. А еще бывает, что при обращении к таким ссылкам открывается разное содержимое (например, example.com/shop/ — работает, а example.com/shop — отдает код 404). Чтобы устранить эти дубли страниц, примените к сайту эти правила перенаправления 301.

Добавить слеш ко всем страницам сайта можно при помощи правила:

RewriteEngine on
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_URI} !.
RewriteRule ^(.*) %{REQUEST_URI}/ [R=301,L]

Это правило автоматически перенаправит поискового робота и посетителя, например, со страницы example.com/shop на example.com/shop/.

Чтобы наоборот убрать слеш в конце ссылок на страницы сайта, внесите в файл .htaccess следующие директивы:

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} /$ [NC]
RewriteRule ^(.*)(/)$ $1 [L,R=301]

В эти правила можно добавить исключение для конкретной директории, чтобы на нее правило перенаправления не действовало — например, если это обусловлено особенностями CMS сайта:

RewriteCond %{REQUEST_URI} !admin/$

Добавьте эту строку в середину правила (под остальными RewriteCond) и измените имя директории из примера.

Сделать собственную страницу с ошибкой (ErrorDocument)

Посетители могут перейти по несуществующим ссылкам на вашем сайте и увидеть сформированное браузером сообщение: «HTTP 404 Not Found: The requested URL /123 was not found on this server». Вы можете создать свою собственную страницу такой ошибки. Для этого добавьте инструкцию в файл .htaccess:

ErrorDocument 404 /error404.html

Страницу ошибки error404.html поместите в ту папку, где находится сам .htaccess или укажите в директиве путь к файлу во вложенной папке. Собственные страницы ошибок можно создать и для ряда других ответов сервера: 500 (ошибка в скрипте), 403 (доступ запрещен), 401 (не авторизован) и т.д.

Закрыть сайт от посетителей

Временно закрыть сайт бывает нужно, например, во время обновления внешнего вида сайта. Подробно способы закрытия сайта средствами .htaccess мы разобрали в статье нашего блога. Рассмотрим наиболее популярные способы блокировки доступа ниже.

Запретить доступ по IP-адресу

Простая директива, в которой указываются списки IP-адресов доступа и запрет для остальных, выглядит так:

<RequireAll>
    Require ip X.X.X.X
</RequireAll> 

Вместо X.X.X.X укажите ваш IP-адрес (проверить его можно, например, здесь). Обращения с других IP-адресов завершатся ошибкой 403 Forbidden.

Чтобы запретить доступ к сайту только с определённого IP-адреса, нужно добавить not. Само правило будет выглядеть так:

<RequireAll>
    Require all granted
    Require not ip X.X.X.X
</RequireAll>

Если ваш интернет-провайдер выдаёт IP-адрес из какого-то диапазона, и его последние цифры могут меняться, IP-адрес можно указать не полностью или сразу с подсетью или все эти варианты сразу, через пробел:

<RequireAll>
    Require ip X1.X1.X1.X1 X2.X2 X3.X3.X3.X3/24
</RequireAll>

Аналогичным вариантом будет:

order deny,allow
deny from all
allow from X.X.X.X 

Однако, этот вариант уже признан устаревшим, хоть ещё иногда встречается.

Запретить доступ по User-Agent

Этот метод обычно требуется в случае, если доступ к сайту нужно запретить для роботов или программ, имеющих динамические IP-адреса. Подробно о User-Agent мы рассказали в статье нашего блога. 

Для блокировки достаточно в начало файла .htaccess добавить директивы:

SetEnvIfNoCase User-Agent example1 bad_bot
SetEnvIfNoCase User-Agent example2 bad_bot
<RequireAll>
    Require all granted
    Require not env bad_bot
</RequireAll> 

Вместо example1 и example2 укажите User-agent роботов или программ, доступ для которых требуется запретить.

Этот вариант самый предпочтительный, поскольку в bad_bot можно добавить сколько угодно User-Agent и заблокировать их одним небольшим правилом

Альтернативным вариантом будет:

<RequireAll>
    Require all granted
    Require expr %{HTTP_USER_AGENT} !~ /(?i:example1|example2)/
</RequireAll> 

Правило ?i: делает регулярное выражение нечувствительным к регистру.

Такой вариант подойдёт, если нужно сделать особое правило блокировки на основе регулярных выражений. 

Помимо %{HTTP_USER_AGENT} можно использовать и другие стандартные переменные сервера. Список других переменных и примеров регулярных выражений есть в официальной документации Apache.

Ещё один альтернативный вариант блокировки роботов:

RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} “(example1|example2)” [NC]
RewriteRule .* - [F]

Этот вариант в свою очередь является одним из самых распространённых и тоже позволяет использовать регулярные выражения. Другие примеры можно найти в официальной документации Apache.

Направить на страницу о технических работах

Также можно перенаправлять посетителей на собственноручно созданную страницу с сообщением о проводимых технических работах. С указанного в условии (RewriteCond) IP-адреса сайт будет отображаться по-прежнему:

RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^X.X.X.X$
RewriteCond %{REQUEST_URI} !^site-closed.html
RewriteRule ^.*$ site-closed.html

Страницу ошибки site-closed.html необходимо поместить в корневом каталоге сайта или указать в директиве путь к ней.

Поддомен открывается с ошибкой Internal Server Error (частный случай)

Для поддомена наследуются настройки .htaccess домена. Если в настройках .htaccess домена используются правила mod_rewrite, они могут приводить к некорректной работе поддомена. Добавьте в начало файла .htaccess поддомена следующую директиву:

RewriteEngine off

Это правило отключит mod_rewrite для вложенной директории поддомена.

Установка индексного файла (DirectoryIndex)

При открытии директории без указания конкретного файла веб-сервер ищет индексные файлы index.html, index.php в порядке приоритета для отображения. Если индексные файлы отсутствуют, сервер возвращает ошибку 403 Forbidden, так как отображение списка файлов (листинг директорий) по умолчанию запрещено.

Чтобы установить в качестве индексного файла произвольный файл, следует добавить инструкцию:

DirectoryIndex имя_файла

Например, следующая инструкция предписывает веб-серверу при обращении к сайту открывать не страницу, а изображение example.jpg в папке pics сайта:

DirectoryIndex /pics/example.jpg

Настройки веб-серверов в Панели управления

В настройках базового веб-сервера вы можете изменять все директивы PHP, значение графы Changeable для которых соответствует PHP_INI_PERDIR или PHP_INI_ALL. Эти настройки будут иметь силу на всех сайтах, которые работают на этом веб-сервере.

Управлять абсолютно всеми параметрами PHP вы можете на расширенном веб-сервере, редактируя php.ini через его настройки.

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

Отображать ошибки PHP (display_errors)

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

php_value display_errors 1

Включить журнал ошибок PHP (error_log)

Для того чтобы сохранять, изучать и исправлять ошибки включите их сбор и хранение с помощью следующих строк:

php_value error_log /home/login/domains/example.com/php_errors.log

Директория в пути расположения файла должна существовать, а если ее нет — обязательно создайте папку вручную. Файл журнала будет создан при появлении первой ошибки.

Увеличить оперативную память для скриптов (memory_limit)

Для изменения ограничения на оперативную память для выполнения процесса используйте следующую директиву в .htaccess:

php_value memory_limit 512M

Вместо 512M укажите желаемый размер ограничения. Обратите внимание, что символ «M» (латинская M) указывается слитно со значением. Уточнить максимальное значение оперативной памяти, доступное по тарифу, можно в документе.

Увеличить время выполнения скриптов (max_execution_time)

Чтобы увеличить время выполнения скриптов (в секундах), добавьте следующую директиву в .htaccess:

php_value max_execution_time 300

Вместо 300 укажите желаемый размер ограничения. Обратите внимание, что выполнение скрипта более чем в 10 минут (600 секунд) завершится ошибкой с кодом 504.

Изменить объем загружаемого файла (post_max_size и upload_max_filesize)

По умолчанию через сайт можно загрузить файл объемом не более 1Гб. Чаще этот размер даже меньше — 100Мб, из-за ограничения на объем запроса методом POST.

Если вам нужно загружать файлы бóльшего размера, либо же ограничить их объем (чтобы контролировать дисковую квоту), то управлять объемом загружаемого файла можно через .htaccess:

php_value post_max_size 200M
php_value upload_max_filesize 200M

Вместо 200M укажите желаемый размер ограничения. Обратите внимание, что символ «M» (заглавная латинская M) указывается слитно со значением.

Передавать максимум переменных в PHP (max_input_vars)

Максимальный размер передаваемых переменных определяется с помощью следующей директивы:

php_value max_input_vars 15000

Вместо 15000 укажите необходимый размер ограничения, который требует CMS сайта.

Исправить неверную кодировку (default_charset)

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

AddDefaultCharset "windows-1251"
php_value default_charset "windows-1251"

Вместо «windows-1251» подставьте подходящую кодировку, например, UTF-8. Проверить, в какой именно кодировке написан сайт, можно через инструменты используемого браузера. Если сайт не обрел корректный вид, обратитесь за помощью в службу технической поддержки.

Обрабатывать интерпретатором PHP не только файлы .php (AddType)

Чтобы заставить интерпретатор PHP обрабатывать файлы с произвольным расширением, (например, .phtml), добавьте в файл .htaccess следующую строку:

AddType application/x-httpd-php .phtml

Изменить время хранения сессий PHP

Изменение времени хранения сессий может потребоваться, если вы хотите, чтобы данные об авторизации пользователей на вашем сайте сохранялись дольше.

По умолчанию время хранения сессий — 1440 секунд (24 минуты). Для изменения этого значения добавьте в .htaccess следующие директивы:

php_value session.save_path /home/login/domains/example.ru/tmp
php_value session.gc_maxlifetime 604800
php_value session.cookie_lifetime 604800

Обратите внимание: при большом количестве посетителей и длительном времени сохранения сессий в папке, указанной в session.save_path, образуется большое количество файлов. Это может вызывать замедление сайта в момент очистки старых сессий и увеличивать количество потребляемых ресурсов. Альтернативные механизмы хранения и очистки сессий:

  1. Указывать вложенность директорий хранения сессий с помощью аргумента N в session.save_path и очищать старые сессии собственными скриптами (описание session.save_path в документации PHP).
  2. Реализовать собственный механизм хранения сессий (например, в MySQL) и установить его с помощью функции session_set_save_handler.

Другие настройки (CGI, Python, Node.js)

Включить SSI

Директивы SSI (Server Side Includes) по умолчанию обрабатываются в файлах с расширением .shtml (например, index.shtml). Чтобы SSI обрабатывались и в других файлах, необходимо в файле .htaccess указать типы этих файлов:

AddType text/html .html .ssi
AddOutputFilter INCLUDES .html .ssi

Вместо «.ssi .html» укажите расширения файлов, в которых должны обрабатываться директивы SSI. Использовать в одном и том же файле PHP и SSI одновременно не рекомендуется.

Выполнять скрипты CGI/Perl

Чтобы CGI/Perl-скрипты выполнялись в браузере, необходимо создать файл .htaccess и добавить в него строки:

Options +ExecCGI
AddHandler cgi-script .cgi .pl
SetEnv PERL5LIB /home/login/perl5:/home/login/perl5/lib/perl5:/usr/local/lib/perl5
SetEnv LD_LIBRARY_PATH /home/login/perl5/lib

Вместо «.cgi .pl» укажите список расширений, которые должны обрабатываться веб-сервером. Убедитесь, что у вас есть права на исполнение этих скриптов (например, 755). А в переменных PERL5LIB и LD_LIBRARY_PATH, которые указывают веб-серверу, откуда подгружать модули Perl, вместо login вставьте свой логин.

Включить uWSGI (Python)

Проектам на языке Python необходим файл .htaccess с таким содержанием:

DirectoryIndex site.wsgi
Options +ExecCGI
AddHandler wsgi-script .wsgi
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /site.wsgi/$1 [QSA,PT,L]

Вместо site.wsgi укажите входной файл вашего приложения.

Включить Node.js c помощью приложения Passenger

Чтобы обрабатывать скрипты Node.js, укажите в .htaccess следующие директивы:

SetEnv GHOST_NODE_VERSION_CHECK false
PassengerStartupFile app.js
PassengerResolveSymlinksInDocumentRoot on
Require all granted
PassengerAppType node
PassengerAppRoot /home/login/domains/example.com/public_html
Options -MultiViews 

Замените example.com на основное имя вашего сайта, а login на логин вашего аккаунта.

У меня остались еще вопросы!

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

В данной статье Вы узнаете о настройках файла htaccess: о редиректах и перезаписи, а также о конфигурировании веб-сервера и его защите.

Что такое .htaccess? (Hypertext Access)

Это файл-конфигуратор на уровне каталога, который загружается сервером и дает возможность существенно изменить его поведение (перенаправления, включение/отключение определенных функций). Этот файл также позволяет защитить некоторые разделы сайта.

Из-за специфики названий тип файла htaccess не всегда заметен. Чтобы его увидеть, необходимо активировать “ dot files ” или “ .files ” в вашем программном обеспечении FTP/Cpanel. Если возникают сложности, можно создать и редактировать файл как .txt (просто изменить расширение и название во время загрузки).

htaccess настройка

Всегда делайте бэкап htaccess, когда собираетесь внести какие бы то ни было изменения. Если ошибетесь, сайт высветит ошибку 500 Internal Server Error, и для последнего изменения можно будет просто поместить символ # перед кодом в файле htaccess.

  1. Вы можете комментировать ссылки в htaccess с помощью # , количество символов не имеет значения; к примеру, ## или ### можно использовать для описательных комментариев, а один # — для активации/деактивации кода.
  2. Используйте блокнот для редактирования в Windows, это удобно.
  3. Всегда делайте бэкап.
  4. Htaccess применяется к каталогу, в котором находится, и, таким образом, ко всем каталогам уровнем ниже; это значит, что при перемещении в корневой каталог, он сможет управлять всем сайтом.
  5. Ошибки в htaccess провоцируют 500 Internal Server Error ( внутреннюю ошибку сервера), но без паники — восстановите резервную копию или откомментируйте последний код.

htaccess

Перезапись кода

Просто поместите этот код в файл htaccess в верхней части, чтобы включить перезапись.

## Rewrite Engine Code ##

Options +FollowSymLinks

RewriteEngine on

Управление ошибками

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

Вы можете создавать собственные страницы в любом формате PHP/HTML.

Они не обязательно должны быть в корневом каталоге, но обязательно на одном сервере.

Если поместите URL целиком, тогда статус 404 не появится, скорее всего будет 301 или 200 Error.

ErrorDocument 404 http://www.example.com/404.html

## Error Handling Codes ##

ErrorDocument 401 /401.html

ErrorDocument 403 /403.html

ErrorDocument 404 /404.html

ErrorDocument 400 /400.html

Можно использовать больше или меньше кодов. Полный список кодов ошибок по ссылке Wikipedia.

Временная блокировка индексации

К примеру, может понадобиться, чтобы некоторое время люди вначале попадали на промостраницу. (Вы можете использовать index.php и для других целей).

Это больше относится к сфере общей безопасности и юзабилити, чем к SEO .

Этот сниппет кода блокирует доступ пользователей к спискам файлов.

## Block Index Display ##

Options All -Indexes

Set Default Index File

В любом случае, это удобный код. Нужно только изменить файл; тип файла не обязательно должен быть в HTML.

## Set Default Index Files ##

DirectoryIndex newindex.html

Защита Htaccess

Ваш файл htaccess потенциально уязвим, поэтому обезопасьте его.

## Secure htaccess file ##

<Files .htaccess>

Order Allow,Deny

Deny from all

</Files>

Если у вас WordPress, такой код защитит файл wp-config.php.

## Secure wp-config.php ###

<Files wp-config.php>

Order Allow,Deny

Deny from all

</Files>

Защита локации паролем

С помощью htaccess вы можете защитить определенные сегменты сайта. Вот полезный инструмент для создания этих файлов http://www.tools.dynamicdrive.com/password/

Так, с помощью htaccess и похожего файла htpasswd вы можете блокировать общий доступ к любому файлу или папке на сайте.

Используя тот же метод, что и для htaccess, создайте текстовый файл без названия, тип файла htpasswd. Он будет содержать список имен пользователей и паролей для входа в закрытые разделы, формат такой:

MyUsername:MyPassword

Нужно загрузить файл htpasswd в соответствующее место на сервере с помощью любой программы для пересылки файлов, это должен быть каталог не для общего доступа (не помещайте в /www/ или /htdocs/ ). И еще нужно записать путь файла из корневого каталога, это может выглядеть так:

/private/script/.htpasswd “.

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

AuthName “Restricted Area”

AuthType Basic

AuthUserFile /private/script/.htpasswd

<Files /downloads>

require valid-user

</Files>

Блокировка прямых ссылок (хотлинкинг)

htaccess экономит полосу пропускания, таким образом решается проблема известная как хотлинк ( включение в веб-страницу ресурсов чужого сервера) .

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

## Block Hotlinking ##

RewriteEngine On

RewriteCond %{HTTP_REFERER} !^http://(.+.)?mysite.com/ [NC]

RewriteCond %{HTTP_REFERER} !^$

RewriteRule .*.(jpe?g|gif|bmp|png)$ – [F]

Если только 1-2 специфических сайта (обычно социальные) приводят к данной проблеме, используйте код:

## Block Hotlinking ##

RewriteEngine On

RewriteCond %{HTTP_REFERER} ^http://(.+.)?myspace.com/ [NC,OR]

RewriteCond %{HTTP_REFERER} ^http://(.+.)?friendfeed.com/ [NC,OR]

RewriteCond %{HTTP_REFERER} ^http://(.+.)?livejournal.com/ [NC]

RewriteRule .*.(jpe?g|gif|bmp|png)$ – [F]

Это крайняя мера, которую стоит применять в случаях, когда имеются частые хотлинкеры .

«Сохранить как»

Если у вас блог или другой контентный сайт, определенные файлы будут провоцировать диалог “Save As” (сохранить как), вместо того, чтобы браузер их загружал. Этот код идеален для каталога ресурсов.

Целесообразнее выбрать определенный подкаталог для кода.

## Force a file to download with a “Save As” ##

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

Перенаправить всех, c сохранением IP

Этот способ удобен во время внеплановых работ по технической части.

## Redirect Everyone but Selected IP Address ##

ErrorDocument 403 http://www.myoldsite.com

Order deny,allow

Deny from all

Allow from 111.111.111.111

Понадобится изменить ваш собственный IP-адрес (скопировать линию для каждого IP сотрудников), и отключить это, когда все будет готово.

Выборочная блокировка IP

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

Также вы можете с помощью этого сайта сгенерировать код блокировки любых IP:

http://www.htaccesstools.com/block-ips/

## Block IP Address ##

order allow,deny

deny from 127.0.0.1

deny from 127.0.0.2

deny from 127.0.0.3

allow from all

Раздел 2: перенаправления и перепись

Htaccess позволяет переписать и изменить URL, заменить автоматически созданные ссылки.

Перенаправление с http:// на www

Это старая проблема — добиться, чтобы сайт индексировался и в http://mydomain.com, и в www.mydomain.com.

Иногда бывает так, что сайт индексируется дважды, что не совсем хорошо в плане SEO.

Данная часть кода превратит любой запрос для версии http в www.

## Redirect non-www to the www version ##

RewriteCond %{HTTP_HOST} ^example.com [NC]

RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]

Измените example.com на своей домен.

Перенаправление файла индекса (Index File) в корневой каталог

Еще одна проблема двойной индексации: поисковики индексируют и

www.example.com/ и www.example.com/index.php.

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

## Redirect index to root ##

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /.*index.html HTTP/

RewriteRule ^(.*)index.html$ /$1 [R=301,L]

В этом коде нужно изменить и название файла индекса (в 99% случаев это просто индекс), и расширение (обычно html, htm or php).

Перенаправление всех страниц на SSL

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

Еще понадобится сертификат безопасности и настройки сервера.

RewriteBase /

RewriteCond %{REMOTE_HOST} !^111.11.11.11

RewriteCond %{REQUEST_URI} !^/downtime.html$

RewriteRule ^(.*)$ /downtime.html [R=302,L]

## Redirect all Pages to Secure ##

RewriteCond %{HTTPS} !on

RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

Стандартное перенаправление 301

Перенаправление 301 сообщает Google и браузерам, что запрашиваемая страница перемещена в другое место.

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

Это намного лучше в сравнении со страницей 404, так, по крайней мере, внешние ссылки будут попадать на рабочие страницы.

## Standard 301 Redirect for Permanent Changes ##

redirect 301 /old-page.html http://www.example.com/newpage.html

Нужно изменить только две ссылки: первая — это старая страница, связанная с htaccess (обычно в корне), и вторая — полная ссылка на новую локацию. У вас может быть столько линий, сколько вы хотите перенаправить, но не стоит перенаправлять один и тот же url несколько раз.

Для больших сайтов перенаправления целесообразнее группировать по дате — так проще. Помните, что можно добавить # и превратить линию в комментарий.

Стандартное перенаправление (301) — подкаталог

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

Есть два способа сделать это:

## Redirect for a Directory – Preserves Request ##

RedirectMatch 301 ^/old-folder(.*) http://www.example.com/$1

Первый — сохраняет запрашиваемый файл. Если кто-то запрашивает mysite.com/blog/example.html — последует перенаправление на mystie.com/example.html.

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

Лучше убедиться, что новые файлы присутствуют, в противном случае появится 404.

Второй способ перенаправления используется, когда вы удалили подкаталог и хотите проверить, что не растеряли всех пользователей или ссылки, которые идут на старый подкаталог, и перенаправить их на обновленную страницу.

## Redirect a Directory – Does not preserve Request ##

RedirectMatch 301 ^/old-folder(.*)$ http://www.example.com/new-page.php

Опять же, кастомизировать эти коды очень просто. Нужно лишь вписать старый каталог и новые локации . Если хотите перенаправить на новый подкаталог, просто измените окончание url, чтобы там был подкаталог, но проверьте, что вы оставили $1 в первом примере.

302

Разница между пренаправлениями 301 и 302 в том, как их фиксируют поисковые роботы. Google вряд ли обновит свой индекс для 302, но для 301 это очень даже вероятно. 302 стоит использовать только тогда, когда изменения временные и вы хотите, чтобы Google их игнорировал. Чтобы превратить перенаправление в 302, просто измените цифру в начале. Это работает применительно ко всем сниппетам кодов перенаправления, где используется 301.

## Standard 302 Redirect for Temporary Changes ##

redirect 302 /old-page.html http://www.example.com/newpage.html

Изменение типа запросов файлов

Иногда нужно изменить типы файлов, для лучшего сжатия изображений, или для специального дополнения с php; htaccess справится со всем этим.

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

## Code to make all HTML requests become PHP requests ##

RedirectMatch 301 (.*).html$ http://www.example.com$1.php

Для кастомизации вы можете заменить типы файлов, в данном случае html — старый тип, а php — новый.

Перенаправьте все подкаталоги, за исключением корневого каталога

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

## Redirect an Entire Domain – Preserve Request ##

RewriteRule (.*) http://www.newdomain.com/$1 [R=301,L]

## Redirect all Subfolders to New Domain but Keep Root Intact ##

RewriteRule ^([^/]+)/(.*)$ http://www.example.com/$1/$2/$3 [R=301,L]

Перенаправление всего домена

Иногда возникает ситуация, когда нужен новый домен, но нужно и сохранить все, что было сделано по части SEO для старого домена.

У вас должен быть Google Webmaster Tools, установленный на старом домене, затем вы сможете сообщать Google, что перемещаете домены.

Есть два способа: с сохранением запросов и без. Если у нового домена будет такой же сайт и столько же страниц и ресурсов, тогда лучше сохранить запросы. Другими словами, пользователь, запрашивающий /best-page.html на старом сайте, увидит best-page.html на новом.

Вы можете сделать полное перенаправление домена без сохранения запросов.

По сути, нужно отдельно перенаправить разделы веб-сайта на соответствующие разделы нового сайта, но есть более простой способ.

## Redirect an Entire Domain – No Preservation ##

Redirect 301 / http://www.newdomain.com

файл htaccess

Перепись динамического URL

Большинство динамических URL выглядят примерно так:

http://www.mysite.com/posts.php?category=widgets

Они состоят из домена, файла и строки запросов, которая, в свою очередь, состоит из двух частей : поля и значения.

Для оптимизации URL нужно убрать строку запросов и использовать ее для создания структурированного URL.

В первом случае сделаем URL, который заканчивается как статический файл, то есть превратим URL в http://www.mysite.com/posts-about-widgets.php

RewriteRule ^posts-about-([^/]+).php/?$ /posts.php?category=$1&foo=bar [L]

RewriteCond %{QUERY_STRING} category=([^/]+)

RewriteCond %{QUERY_STRING} !foo=bar

Задается маппинг старого URL на новом.

Здесь три линии; первая определяет место старого URL на новом, вторая — место 1-ой строки запросов, третья — точка остановки, чтобы избежать беспрерывного перенаправления.

Первая линия позволяет установить формат новой страницы, в нашем случае это http://www.mysite.com/posts-about-widgets.php.

Вы можете изменить первую часть URL.

В скобках в конце — поле значения строки запросов, которая сюда переносится. Так URL выглядит достаточно динамично, чтобы отображать отношения с базой данных.

В этом примере — посты из категории виджетов, поэтому нужны соответствующие ключевые слова в URL.

PHP — тип файла, который используется в данном случае, но это может быть html или htm.

Третья выделенная часть содержит оригинальный URL и строку запросов. Включено только поле, значение переносится как переменная.

Вторая линия содержит ссылку на переменную, понадобится изменить поле — добавить ваш URL, а все остальное оставить. По сути, этот код сообщает: «любое количество различных символов и цифр».

Теперь у нас новая страница, но, вероятнее всего, система все еще будет генерировать старые ( уродливые) URL, поэтому нужно перенаправить людей на новую страницу. Для этого понадобится правило переписи/замены Rewrite Rule , которое заменяет запросы для строки запросов в новом ярком URL:

RewriteRule ^posts.php$ /posts-about-%1.php? [L,R=301]

Относительно просто, не так ли? Нужно только поместить ваш старый URL в первую часть, ваш новый URL — во вторую часть. И вуа-ля! Динамическое перенаправление на новую страницу со старой переменной готово!

Совместим части кода. Мы заменили пример с текстом для вставки, чтобы запомнить части, к которым относится каждое утверждение (statement).

Возможно, вы захотите перейти к новому типу URL, возможно, вернуться обратно, к странице http://www.mysite.com/posts/widgets instead of that .php. Это также возможно, нужно лишь немного изменить код.

## Rewrite Dynamic URL to A Static Page ##

RewriteRule ^new-page-([^/]+).php/?$ /old.php?field=$1&foo=bar [L]

RewriteCond %{QUERY_STRING} field=([^/]+)

RewriteCond %{QUERY_STRING} !foo=bar

RewriteRule ^old.php$ /new-page-%1.php? [L,R=301]

## Rewrite Dynamic URL to A Static SubFodler ##

RewriteRule ^new-folder/([^/]+)/?$ /old.php?field=$1&foo=bar [L]

RewriteCond %{QUERY_STRING} field=([^/]+)

RewriteCond %{QUERY_STRING} !foo=bar

RewriteRule ^old.php$ /new-folder/%1/? [L,R=301]

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

Раздел 3: скорость и тонкая настройка

Последний раздел этого руководства посвящен тонкой настройке, которая позволяет улучшить скорость и производительность сайта. Многие из этих сниппетов кода зависят от активности отдельных модулей или разрешений, это значит, что разные серверы и хосты могут вести себя по-разному.

GZIP compression

GZIP compression — серверная функция, которая уменьшает вес веб-страниц и скриптов прежде, чем они отправляются в браузер.

Прежде эта технология была довольно несовершенной, в особенности в безопасных разделах и платежных шлюзах. Сейчас все на порядок лучше. Большая часть браузеров (даже старых) принимает GZIP.

Есть несколько вариантов активировать GZIP. Не нужно изменять код — просто скопируйте и вставьте.

На этом сайте можно проверить, активирован ли GZIP на вашем ресурсе, и сколько времени/места сэкономлено.

http://www.gidnetwork.com/tools/gzip-test.php

Вот четыре способа, выберите один из них:

## Enable GZIP Version 1 ##

php_value output_handler ob_gzhandler

css_value output_handler ob_gzhandler

js_value output_handler ob_gzhandler

##ENABLE GZIP Version 2##

<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>

##Enable GZIP Version 3##

<Files *.php>

SetOutputFilter DEFLATE

</Files>

<Files *.js>

SetOutputFilter DEFLATE

</Files>

<Files *.css>

SetOutputFilter DEFLATE

</Files>

<Files *.html>

SetOutputFilter DEFLATE

</Files>

##Enable GZIP Version 4##

AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css application/x-javascript

BrowserMatch ^Mozilla/4 gzip-only-text/html

BrowserMatch ^Mozilla/4.0[678] no-gzip

BrowserMatch bMSIE !no-gzip !gzip-only-text/html

Активация кэширования

Кэширование позволяет постоянным посетителям не загружать повторно каждый элемент сайта. Если у вас WordPress, тогда можно взять несколько плагинов, например WP Hyper Cache.

Если у вас статический сайт, htaccess дает возможность применить кэширование. Стоит все перепроверить. Если у вас нестандартная CMS, или какой-либо динамический контент, ошибки с кэшированием могут привести к тому, что сайт перестанет обновляться. Поэтому стоит консультироваться с разработчиками.

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

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

## Enable Caching ##

## Files to Cache for One Month ##

<FilesMatch “.(flv|gif|jpg|jpeg|png|ico|swf)$”>

Header set Cache-Control “max-age=2592000”

</FilesMatch>

## Files to Cache for One Week ##

<FilesMatch “.(js|css|pdf|txt)$”>

Header set Cache-Control “max-age=604800”

</FilesMatch>

## Files to Cache for One Day ##

<FilesMatch “.(html|htm)$”>

Header set Cache-Control “max-age=43200”

</FilesMatch>

## Disable cache for script files ##

<FilesMatch “.(pl|php|cgi|spl|scgi|fcgi)$”>

Header unset Cache-Control

</FilesMatch>

GZIP и кэширование существенно улучшают производительность сайта.

Минимизация 404 за счет проверки грамматических ошибок

Check Spelling — это модуль сервера Linux Server Module. Check Spelling проверяет сервер на предмет наличия подобных URL.

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

http://www.mysite.com/caje/red.html

Но на самом деле он/она хотел написать:

http://www.mysite.com/cake/red.html

Check Spelling фиксирует такую незначительную ошибку и исправляет ее (если, конечно, не существует caje/red.html). Также учитывается состояние регистра строчных и прописных символов в URL.

##Make Linux correct case sensitive urls/slight typos in urls##

CheckSpelling On

Если вы думаете, что .htaccess нужен только для настройки редиректов — вы ошибаетесь. Возможности файла намного шире, с его помощью можно сделать много полезного для качественной и корректной работы сайта. Рассказываем о том, как оптимизатор или вебмастер может использовать файл .htaccess.

Краткая справка по файлу .htaccess

Где находится файл и как его редактировать

Базовые правила работы с .htaccess: синтаксис

Базовые спецсимволы

Часто используемые переменные

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

1. Постраничный редирект

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

3. Настройка главного зеркала

4. 301 редирект на другой домен

Ускорение работы сайта

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

6. Управление кэшированием

Настройка отображения сайта

7. Замена индексного файла

8. Настройка отображения расширения .html в адресах страниц

9. Настройка кодировки

10. Страницы для 4хх ошибок

Как усилить безопасность сайта с помощью .htaccess

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

12. Ограничение доступа к сайту

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

14. Защита от внедрения скриптов

15. Защищаем сайт от DOS-атак

Дополнительные возможности .htaccess

16. Настройки php

17. Борьба со спамерами в комментариях на WordPress

18. Назначение e-mail для администратора сервера

19. Вывод сообщения о недоступности сайта

Что нужно помнить при работе с .htaccess

Краткая справка по файлу .htaccess

Файл .htaccess (сокращенное от «hypertext access») используют программисты и оптимизаторы для настройки веб-сервера. В этом файле задают определенные команды, которые указывают серверу, как должен работать сайт.

Файл .htaccess не нужен, если у вас есть доступ к главному конфигурационному файлу сервера (обычно имеет название .httpd.conf, в зависимости от настроек операционной системы может называться по-другому). Изменения в главном файле начинают работать быстрее, а запросы не нагружают сервер.

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

В .htaccess можно прописать различные настройки, которые помогут в оптимизации сайта:

  • настроить 301-е редиректы;
  • обеспечить безопасность всего сайта и его отдельных разделов;
  • настроить правила отображения содержимого сайта;
  • ускорить загрузку страниц.

Где находится файл и как его редактировать

Обычно .htaccess помещают в корневую директорию сайта.

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

  • Если .htaccess расположен в корневой директории — прописанные в нем директивы применяются ко всему сайту.
  • Если файл находится в папке каталога — директивы распространяются только на этот каталог и вложенные в него подкаталоги. Для каталога и подкаталогов приоритетными являются команды, прописанные в .htaccess, который находится в директории каталога.

Если вы создаете этот файл самостоятельно, не забудьте точку в начале имени — ведь название фактически представляет собой файловое расширение.

Создать или отредактировать файл .htaccess можно в любом текстовом редакторе.

Редактирование готового .htaccess в CMS

В некоторых CMS файл .htaccess можно найти и редактировать прямо в административной панели. Например, в Битриксе для этого нужно перейти в раздел «Контент» и кликнуть по пункту «Файлы и папки»:

15+ возможностей .htaccess, о которых вы могли не знать

Если ваш сайт работает на WordPress, воспользуйтесь функционалом плагинов Yoast SEO и All in One SEO Pack (их модули позволяют работать с файлом .htaccess).

Если .htaccess еще не создан

Создайте его в текстовом редакторе (пропишите необходимые директивы и сохраните файл с «никаким» именем и расширением .htaccess). Затем разместите его в корневой директории сайта (или в папке каталога, если прописываете локальные директивы).

Система PromoPult — рекламный комплекс для привлечения клиентов из интернета. SEO, PPC, SMM в одном аккаунте. Полная автоматизация, готовые чек-листы, точные настройки. Комплексное решение для малого и среднего бизнеса. Минимальные стартовые бюджеты, полный набор инструментов для всех каналов продвижения, глубокая автоматизация, кампании «под ключ».

Базовые правила работы с .htaccess: синтаксис

Основные правила синтаксиса несложные: каждая команда начинается с новой строки. В файле можно оставлять комментарии (например, чтобы другие оптимизаторы или разработчики понимали, для чего прописана та или иная директива). Чтобы оставить комментарий, необходимо поставить знак #. Все содержимое строки, которое находится после этого знака, сервер не учитывает и не воспринимает как команду.

После сохранения файла изменения вступают в силу сразу. Сервер перезагружать не нужно.

Для указания правил в .htaccess используются регулярные выражения. В них используются специальные символы и переменные. Полную документацию по ним приложим ниже, а пока расшифруем самые популярные.

Базовые спецсимволы:

^ — обозначает начало строки;

$ — конец строки;

. — обозначает любой символ (кроме символа конца строки);

* — любое количество любых символов;

? — один определенный символ;

[0-9] — заменяет любую цифру, [a-z] — любую букву из латинского алфавита;

| — символ «или», выбирается или одна группа, или другая;

() — применяется для выделения групп символов.

Часто используемые переменные:

%{HTTP_USER_AGENT} — содержит информацию о браузере пользователя и операционной системе (поле User-agent, которое передает браузер при обращении к сайту);

%{REMOTE_ADDR} — IP адрес пользователя;

%{REQUEST_URI} — запрашиваемый URI;

%{QUERY_STRING} — параметры запроса после знака ?.

Полный синтаксис и все возможности файла — в официальной документации. Также есть неплохой русскоязычный ресурс о практическом использовании файла.

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

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

Настройка редиректов — самый распространенный способ использования файла .htaccess (об этом мы уже упоминали в начале статьи). Больше о редиректах можно почитать здесь.

При настройке 301 редиректов учитывайте следующее:

  1. Убедитесь, что перенаправление действительно нужно. Проверьте, как работает CMS. Например, некоторые CMS по умолчанию перенаправляют пользователей на страницы со слешем. В таком случае дополнительная настройка редиректа не нужна.
  2. Следите за тем, чтобы не было двух и больше последовательных перенаправлений. Несколько последовательных редиректов нагружают сервер и страницы загружаются медленнее.
  3. Сначала частные редиректы, затем — глобальные. Например, перенаправляйте сначала с одной страницы на другую (частный редирект, к примеру, с удаленной страницы на новую). А затем — общий редирект на страницу со слешем в конце URL.

1. Постраничный редирект

Есть несколько ситуаций, когда требуются постраничные редиректы:

  • Изменение структуры сайта, при котором у страницы меняется уровень вложенности (например, структура упростилась и страница теперь находится не на третьем уровне вложенности от корневой директории, а на втором).
  • Удаление страницы. Страница уже не нужна, но нужно сохранить трафик, который на нее приходит. Хороший пример для интернет-магазина — когда товар снимается из каталога, логично поставить редирект на товарную категорию.
  • Меняется URL страницы (такого лучше избегать).

Не очень удачное решение — просто удалить страницу. Поисковые роботы при попытке зайти по проиндексированному URL получат ошибку 404, что не очень хорошо для SEO. Редирект — оптимальный вариант, так как позволяет сохранить и входящий трафик, и позиции в поисковой выдаче.

Как настроить 301 редирект

Для этого в файле .htaccess необходимо указать директиву простого перенаправления:

Redirect 301 /url1/ https://shop.com/url2
  • /url1/ здесь — адрес страницы, с которой мы хотим перенаправлять пользователей. Адрес нужно указывать от корневой директории сайта, без указания протокола и домена. Например, /silovaya-tehnika/generatory-elektrostantsii/benzinovye/.
  • https://shop.com/url2 — адрес страницы, на которую нужно перенаправить посетителей. Здесь уже нужно указывать полный адрес — с протоколом и доменом. Например, https://www.vseinstrumenti.ru/silovaya-tehnika/generatory-elektrostantsii/benzinovye/.

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

Чтобы не вводить в заблуждение поисковых роботов, каждая страница сайта должна быть доступна только по одному адресу. Помните, что для роботов адреса https://site.com/catalog и https://site.com/catalog/ — это две страницы, а не одна. Поэтому нужно настроить:

  • редирект на страницы без слеша в конце адреса (или наоборот, в зависимости от того, какой логики вы придерживаетесь в целом по сайту);
  • главное зеркало — указать, какой адрес сайта следует считать основным (например, c www или без www).

Для устранения дублей с помощью этих настроек нужно воспользоваться модулем mod_rewrite. Здесь уже используются директивы сложного перенаправления. Первой командой необходимо включить модуль преобразования URL:

RewriteEngine On

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

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

Если нужен редирект на слеш, используйте такие команды:

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

На страницу без слеша редирект осуществляется с помощью такого кода:

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

3. Настройка главного зеркала

Первым делом определитесь, какой адрес должен использоваться как основной для поиска.

Редирект на HTTPS

RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

При настройке главного зеркала нужно определиться, как указывать адрес: с «www» или без. Есть несколько способов для определения:

  • Добавьте сайт в Яндекс.Вебмастер в двух вариантах — с «www» и без. Яндекс выберет главное зеркало по своему усмотрению и отобразит эту информацию в консоли.
  • Посмотрите на поисковую выдачу. Если в индексе больше страниц вашего сайта с «www» — устанавливайте главное зеркало с «www». Если без — используйте обычный адрес.
  • Если сайт новый — можете смело выбирать любой вариант.

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

Перенаправление с адреса с www на адрес без www

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

Перенаправление с адреса без www на адрес с www

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www..* [NC]
RewriteRule ^(.*) http://www.%{HTTP_HOST}/$1 [R=301]

4. 301 редирект на другой домен

Чаще всего этот редирект используется при смене домена сайта (переезд на новый домен). Редирект 301 позволяет перенаправить поисковых роботов и пользователей на измененный адрес сайта. Еще его используют для серого SEO, но мы в это углубляться не будем.

Если ваш сайт переехал на новый домен, укажите в .htaccess один из следующих вариантов кода:

RewriteEngine On
RewriteRule ^(.*)$ http://www.mysite2.com/$1 [R=301,L]

или

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.mysite1.ru$ [NC]
RewriteRule ^(.*)$ http://www.mysite2.ru/$1 [R=301,L]

mysite1 и mysite2 в коде — это адрес старого и нового домена, соответственно.

Ускорение работы сайта

С помощью команд в .htaccess можно повысить скорость загрузки страниц сайта.

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

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

У Gzip более гибкий синтаксис, который поддерживает работу с масками:

<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>

6. Управление кэшированием

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

Так выглядят директивы для усиления кэширования:

FileETag MTime Size
<ifmodule mod_expires.c>
<filesmatch ".(jpg|gif|png|css|js)$">
ExpiresActive on
ExpiresDefault "access plus 1 week"
</filesmatch>
</ifmodule>

В нашем примере мы ограничили продолжительность жизни кэша 1 неделей (“access plus 1 week”). Вы можете указать любое другое значение и использовать другие единицы измерения, например:

  • месяц (month);
  • год (year);
  • часы (hours).

То же самое можно указать и с помощью такого кода:

<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType application/javascript "access plus 7 days"
ExpiresByType text/javascript "access plus 7 days"
ExpiresByType text/css "access plus 7 days"
ExpiresByType image/gif "access plus 7 days"
ExpiresByType image/jpeg "access plus 7 days"
ExpiresByType image/png "access plus 7 days"
</IfModule>

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

  • 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.

Настройка отображения сайта

В начале статьи мы упоминали о том, что с помощью .htaccess можно управлять отображением сайта. Рассмотрим несколько примеров того, что можно сделать.

7. Замена индексного файла

Индексный файл — страница, которая открывается по умолчанию при обращении к определенному каталогу. Вот так этот файл выглядит в каталоге сайта:

15+ возможностей .htaccess, о которых вы могли не знать

Как правило, такой файл называется index или default, и имеет расширение .html/.php/.htm или другие.

Допустим, у вас магазин мебели и на сайте есть раздел с офисной мебелью — https://mebel-shop.com/ofisnaya-mebel/. В директории каталога находится файл index.html, но вы хотите, чтобы по умолчанию пользователям загружался файл new.html с товарами-новинками.

Для этого в каталоге /ofisnaya-mebel/ разместите файл .htaccess и укажите в нем следующую директиву:

DirectoryIndex new.html

«new.html» — название файла, который нужно показать вместо дефолтного.

Также в директиве можно указать несколько файлов. Если первый из них будет недоступен — откроется второй, если недоступен первый и второй — откроется третий, и т.д.

DirectoryIndex new.html new2.php new3.html

8. Настройка отображения расширения .html в адресах страниц

URL-адреса страниц сайта могут отображаться с расширением или без:

https://site.com/main.html или https://site.com/main

Отображение расширения не влияет на ранжирование сайта (по крайней мере, нет данных, которые бы это подтверждали). Каждый оптимизатор делает это по своему усмотрению.

В .htaccess вы можете настроить отображение расширения или убрать его.

Добавить расширение:

RewriteCond %{REQUEST_URI} (.*/[^/.]+)($|?)
RewriteRule .* %1.html [R=301,L]
RewriteRule ^(.*)/$ /$1.html [R=301,L]

Убрать расширение:

RewriteBase /
RewriteRule (.*).html$ $1 [R=301,L]

Такие же директивы можно применить для управления показом расширения .php.

9. Настройка кодировки

Если кодировка сайта указана неправильно (или не указана вовсе), текст на страницах может отображаться в виде набора непонятных символов. Поэтому всегда указывайте кодировку.

Обычно ее указывают в метатеге каждой страницы. Если на вашем сайте такого нет, пропишите директиву в .htaccess.

Чтобы задать файлу кодировку Windows-1251, используйте такой код:

AddDefaultCharset WINDOWS-1251

Для того, чтобы все файлы при загрузке на сервер преобразовались в кодировку UTF-8, нужна такая директива:

CharsetSourceEnc UTF-8

10. Страницы для 4хх ошибок

Стандартные страницы ошибок (например, 404) можно сделать оригинальными и полезными для пользователя. Например, разместить там информативное сообщение о том, почему появилась ошибка и дать ссылки на другие разделы сайта. Это поможет удержать пользователей на сайте.

15+ возможностей .htaccess, о которых вы могли не знать

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

  1. Подготовьте и сверстайте страницы для ошибок.
  2. Создайте для этих страниц папку error в корне сайта и разместите в ней файлы страниц.
  3. Пропишите в .htaccess следующие директивы:
ErrorDocument 401 /error/401.php
ErrorDocument 403 /error/403.php
ErrorDocument 404 /error/404.php
ErrorDocument 500 /error/500.php

Как усилить безопасность сайта с помощью .htaccess

С помощью файла .htaccess можно управлять настройками безопасности сайта. Например:

  • закрыть доступ к определенным файлам (или даже разделам);
  • защитить сайт от кражи контента;
  • обеспечить защиту от DOS-атак;
  • защитить сайт от вредоносных скриптов.

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

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

Вот, что нужно прописать:

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

При попытке загрузить любые картинки с расширением gif, jpg или png с вашего сайта конкуренты получат изображение goaway.gif. На нем размещено сообщение о том, что красть чужие картинки — это плохо. Здесь вы можете покреативить и пристыдить конкурентов (изображение появится на ресурсе, на котором планировали использовать ваши картинки), либо просто поставить любое изображение-заглушку. Вместо «mysite.com» укажите адрес вашего сайта.

12. Ограничение доступа к сайту

В .htaccess также можно прописать директивы, которые запрещают доступ различным посетителям сайта. Например,

  • можно закрыть доступ определенным IP;
  • закрыть доступ подсетям;
  • заблокировать доступ вредоносным ботам.

Директивы для блокирования 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>

Вы можете использовать этот список юзер-агентов, дополнить его или убрать ненужные позиции. Также вы можете создавать такие списки с нуля. А здесь вы можете посмотреть список хороших и плохих юзер-агентов ботов.

В том числе, в .htaccess вы можете запретить доступ к сайту поисковым роботам. Например, запрет для бота Google будет выглядеть так:

RewriteEngine on
RewriteCond %{USER_AGENT} Googlebot
RewriteRule .* - [F]

Запрет по IP

Здесь есть два варианта:

  • открыть доступ только конкретным IP-адресам, а всем остальным запретить;
  • разрешить доступ для всех, а указанным IP — запретить.

Запрет доступа для всех, кроме указанных IP

ErrorDocument 403 https://mysite.com
Order deny,allow
Deny from all
Allow from IP1
Allow from IP2 и т. д.

«https://mysite.com» здесь — адрес вашего сайта. IP1 и IP2 — места для указания IP-адресов, которым вы хотите открыть доступ к сайту.

Запрет доступа для определенных IP

allow from all
deny from IP1
deny from IP2 и т. д.

Запрет доступа для подсети

allow from all
deny from 192.168.0.0/24

После «deny from» впишите маску подсети.

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

Закрыть доступ к определенному файлу

<files myfile.html>
order allow,deny
deny from all
</files>

В первой строке вместо «myfile.html» указываем название файла, к которому хотите запретить доступ. Название файла обязательно указывайте с расширением. При попытке открыть файл пользователь увидит ошибку 403 — «доступ запрещен».

Ограничение доступа пригодится и в таких случаях:

  1. Доступ к самому .htaccess.
  2. Если сайт на WordPress — закройте паролем файл wp-config.php (это важно с точки зрения безопасности, так как в этом файле хранится информация о базе данных).

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

Например, вы не хотите, чтобы на ваш сайт попадали посетители с сомнительных ресурсов (с шок-контентом, скажем). Пропишите такую команду:

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

Вместо «bad-site.com» укажите URL-адреса сайтов, с которых не хотите принимать входящий трафик.

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

К некоторым файлам или директориям с помощью .htaccess можно ограничить доступ — защитить их паролем. Для этого нужно проделать два действия.

1. Создайте файл с паролями

Создайте файл .htpasswd, укажите в нем логины и пароли в таком формате:

user:password

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

Разместите файл с паролями в корневой директории сайта.

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

2. Пропишите директивы в .htaccess

Укажите, какие именно файлы или папки нужно защитить паролем.

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

<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

«/pub/home/.htpasswd» — расположение нашего файла с логинами и паролями. Укажите путь к своему файлу от корня. После установки пароля проверьте, корректно ли выполняются все директивы.

14. Защита от внедрения скриптов

Хакеры могут использовать ваш сайт в своих целях с помощью скриптовых инъекций — внедрения фрагмента кода, который будет выполняться на вашем сайте.

В .htaccess мы можем настроить защиту от подобных атак. Для этого необходимо прописать следующие директивы:

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 — «доступ запрещен».

15. Защищаем сайт от DOS-атак

Организовать защиту от DOS-атак можно разными способами. Один из них — установить лимит на максимальный размер запроса. По умолчанию на сервере такого ограничения нет, поэтому нужно прописать его в .htaccess.

Например, ограничить размер загружаемых файлов в байтах:

LimitRequestBody 10240000

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

Если хотите защититься более основательно — изучите директивы LimitRequestFields, LimitRequestFieldSize и LimitRequestLine в официальной документации.

Дополнительные возможности .htaccess

16. Настройки php

Эти настройки нужны программистам, если по каким-то причинам нет доступа к файлу php.ini.

Рассмотрим для примера выражения php_value — позволяет устанавливать максимальный объем данных, загружаемых на сайт и максимальное время обработки скриптов. Это важные настройки, так как напрямую влияют на производительность сайта.

<ifModule mod_php.c>
 php_value	upload_max_filesize	125M
 php_value	post_max_size		20M
 php_value	max_execution_time 60
</ifModule>

В строке «upload_max_filesize» указываете максимальный размер загружаемых файлов в мегабайтах, «post_max_size» означает максимальный объем постинга, «max_execution_time» указывает время в секундах на обработку скриптов.

17. Борьба со спамерами в комментариях на WordPress

Чтобы избавиться от спамных комментариев, закройте доступ к файлу wp-comments-post.php. Сделать это можно с помощью таких команд:

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

Вместо «mysite.com» впишите адрес вашего сайта.

18. Назначение e-mail для администратора сервера

С помощью этого кода можно назначить адрес электронной почты администратора:

ServerSignature EMail
SetEnv SERVER_ADMIN admin@mysite.com

Все уведомления о важных событиях на сервере будут приходить на этот адрес.

19. Вывод сообщения о недоступности сайта

Лучше, конечно, избегать ситуаций, когда сайт недоступен. Но если это все-таки случилось, следует показать пользователям страницу с информацией о том, что сайт недоступен по техническим причинам. А также сообщить, когда ресурс снова заработает в нормальном режиме.

Такие команды перенаправят пользователя на страницу с информацией о недоступности сайта:

RewriteEngine on
RewriteCond %{REQUEST_URI} !/info.html$
RewriteCond %{REMOTE_HOST} !^12.345.678.90
RewriteRule $ https://mysite.ru/info.html [R=302,L]

В строке «RewriteCond %{REMOTE_HOST} !^12.345.678.90» замените IP-адрес на адрес своего сервера. А в строке «RewriteRule $ https://mysite.ru/info.html [R=302,L]» замените адрес https://mysite.ru/info.html на адрес страницы с информацией о недоступности сайта.

Что нужно помнить при работе с .htaccess

  • Перед любыми изменениями файла делайте бэкап (резервную копию). Если обновление директив приведет к каким-то ошибкам или неполадкам на сайте, вы сможете быстро вернуть все как было.
  • Директивы в файле .htaccess, размещенном в корневой директории сайта, распространяются на все каталоги и подкаталоги. Если вы размещаете дополнительные файлы .htaccess в каталогах, указывайте в них только новые директивы — то есть те правила, которые нужно применить только к конкретному каталогу. Остальные правила унаследуются от .htaccess, расположенного уровнем выше (в родительском каталоге или в корне сайта).
  • Если нужно прописать сразу несколько разных директив, не указывайте их все сразу. Добавляйте их по одной, обновляйте файл и проверяйте, корректно ли работает команда. Если все хорошо, переходите к следующей и т.д. Так вы сможете избежать ошибок и проще будет разобраться, что сделано не так.
  • Обратите внимание! В командах файла .htaccess нельзя использовать кириллицу. Если нужно указать адрес кириллического домена (сайт.рф), используйте метод punycode (для этого воспользуйтесь любым whois-сервисом). Например, адрес «сайт.рф» будет выглядеть как «xn--80aswg.xn--p1ai/$1».
  • При появлении ошибки 500 проверьте синтаксис директивы — иногда причиной ошибки может быть банальная опечатка. Также файл .htaccess можно проверить на наличие ошибок с помощью онлайн-сервисов. Например, этого. Если ошибок в файле нет, а 500 ошибка все равно появляется, скорее всего, такой тип команды запрещен в главном конфигурационном файле веб-сервера. Тут уже потребуется помощь программиста и провайдера хостинга.
  • Указывайте в .htaccess только для тех настроек, которые нельзя установить с помощью других методов. Если в .htaccess будет слишком много команд, это может снизить работоспособность сайта.
  • Пользуйтесь генератором .htaccess, если не хотите изучать синтаксис самостоятельно.

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

Mod_rewrite — модуль, используемый веб-серверами для преобразования URL.

Директивы модуля Mod_rewrite

  • RewriteBase
  • RewriteCond
  • RewriteEngine
  • RewriteLock
  • RewriteLog
  • RewriteLogLevel
  • RewriteMap
  • RewriteOptions
  • RewriteRule

Варианты реализации Редиректа с помощью файла .htaccess

  1. Простой редирект:
    Redirect 301 / http://www.domain.ru/
    

    или

    redirect /secret http://www.site.ru/nosecret
    

    Ставится в файле .htaccess или httpd.conf для Apache. Первый «/» означает, что всё с верхнего уровня сайта, включая все подкаталоги, будет переадресовано (не забывайте поставить последний «/»). Если Вы хотите переадресовать только страницу, сохранив PR старой страницы, можно сделать так:

    Redirect 301 /old/old.htm http://www.domain.ru/new.htm где:
    /old/old.htm — путь и имя старой страницы
    http://www.domain.com/new.htm — новый путь и новое имя перемещенной страницы

  2. Редирект на любую страницу по ip пользователя или при запросе конкретной страницы (а также по маске имени).
    Если у пользователя ip 192.152.37.125, то он будет перенаправлен на страницу user.php:

    SetEnvIf REMOTE_ADDR 192.152.37.125 REDIR="redir"
    RewriteCond %{REDIR} redir
    RewriteRule ^/$ /user.php
    
  3. Редирект при запросе определённых файлов. Если запрашиваются файлы, расширение которых не указано в файле .htaccess (gif и jpg), то следует перенаправление:
    RewriteEngine On
    RewriteRule !.(gif|jpg)$ index.php
    
  4. Использование mod_rewrite:
    Options +FollowSymLinks
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^domain.ru
    RewriteRule ^(.*)$ http://www.domain.ru/$1 [R=permanent,L]
    
  5. Редирект с регулярным выражением:
    RedirectMatch 301 (.*) http://www.domain.ru$1 Прописывается в файле .htaccess.
    

    (.*) RedirectMatch фактически соответствует регулярным образцам выражения после доменного имени. Таким образом, нельзя выполнить соответствие образца на ^/domain.ru. Однако, можно преобразовать страницы с использованием .html расширения к файлам того же самого названия, но с .php расширением:

    RedirectMatch 301 (.*).html$ http://www.domain.ru$1.php
    

    Если необходимо сделать различное перенаправление для отдельных страниц, можно использовать следующее:

    RedirectMatch Permanent ^/html/resources.html$ http://www.domain.com/resources.php
    RedirectMatch Permanent ^/html/other_page.html$ http://www.domain.com/other_page.php
    RedirectMatch Permanent ^/(.*)$ http://www.domain.com/
    

    «RedirectMatch Permanent» — это эквивалент «RedirectMatch 301», строка с «*(Wildcard)» должна быть последней в этом списке.
     

  6. Создание удобо читаемых URL
    Чтобы преобразовать, например, www.domain.ru/product.php?id=123 в www.domain.ru/product/123 следующим образом:

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

    В следующем примере преобразуем www.domain.ru/script.php?product=123 в www.domain.ru/cat/product/123/:

    RewriteRule cat/(.*)/(.*)/$ /script.php?$1=$2
    
  7. Редирект на PHP:
    header("HTTP/1.1 301 Moved Permanently");
    header("Location: http://www.domain.ru/newdir/newpage.htm");
    exit();
    

    Естественно, надо создать страницу, при обращении к которой и будет происходить Редирект, и разместить её на сервере. И лучше укажите HTTP/1.1 (а не HTTP/1.0 или HTTP/0.9, которые не поддерживают виртуальный хостинг)
     

  8. Редирект всех файлов в папке на один файл.
    Например вы больше не нуждаетесь в разделе сайта Files и хотите перенаправить все запросы к папке /files на один файл /page.php. Для этого добавляем в .htaccess следующий код.

    RewriteRule ^files(.*)$ /page.php [L,R=301]
    
  9. Редирект всей папки кроме одного файла
    В следующем примере все файлы из папки /files будут редиректится на на файл /page.php,  кроме файла /files/test.html котоый должен редиректится на /test-1.html

    RewriteRule ^files/test.html /test-1.html [L,R=301]
    RewriteRule ^files(.*)$ /page.php [L,R=301]
    
  10. Редирект динамического URL на новый файл.
    Данный вариант пригодится если вы хотите редиректить динамический URL с параметрами на новый статический файл.

    RewriteRule ^article.jsp?id=(.*)$ /test.htm [L,R=301]
    

    То есть теперь, запрос к файлу вида http://www.domain.ru/article.jsp?id=8547 и/или http://www.domain.ru/article.jsp?id=1234  будет отправлен на файл http://www.domain.ru/test.htm.
     

  11. Массовый редирект новых файлов.
    Тепепь перейдем к самому сложному моменту, когда вам надо редиректить массу URL-ов, например после смены вашей CMS. Тут сразу возникает ряд проблем. Во-первых, внесение всех изменившихся адресов в .htaccess файл займет очень много времени, да и само по себе занятие малоприятное. Во-вторых, слишком много записей в .htaccess файле будут тормозить Apache сервера. И в третьих, при внесении такого количества информации высока вероятность, что вы где то ошибетесь. По этому, самый лучший выход, это нанять програмиста который вам напишет динамический редирект.
    Нижеприведенный пример написан на PHP, но так же может быть выполнен на любом языке. Предположим вы перешли на новую систему ссылок на вашем сайте и все файлы оканчивающиеся на старый 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 редирект:

    
    

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

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

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

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

        RewriteEngine on
        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.

  12. Убираем у всех запросов вначале «WWW.»
    RewriteEngine on    # оглашаем, что хотим использовать mod_rewrite
    RewriteCond %{HTTP_HOST} ^www.(.*) [NC]
    RewriteRule ^/?(.*) http://%1/$1 [L,R=permanent]
    
  13. Меняем расширение .html на .php
    Иногда бывает так, что у Вас статичный веб-сайт, а Вам необходимо, чтобы на нем срабатывал какой-нибудь php-скрипт. Для этого Вам необходимо сказать серверу, чтобы он обрабатывал эту страницу как php-файл.

    AddHandler application/x-httpd-php .html
    

    Этот прием можно использовать и для других расширений файлов:

    AddHandler application/x-httpd-php .xml
    AddHandler application/x-httpd-php .asp
    

Запрещение доступа в конкретную директорию

  1. для всех ко всем файлам в директории:
    deny from all
    
  2. к конкретному файлу:
    deny from all
    
    
  3. по ip пользователя:
    order deny,allow
    deny from all
    allow from 192.152.37.125
    

    Доступ в данную директорию будет разрешён только пользователю с ip 192.152.37.125.

  4. Директива Options -Indexes — запрет на отображение содержимого каталога при отсутствии индексного файла Иногда нужно сделать так, чтобы в случае отсутствия в каталоге файла, который показывается по умолчанию, не выдавался список файлов в каталоге. Тогда можно добавить в .htaccess такую строчку :
    Options -Indexes
    

    В этом случае вместо списка файлов в каталоге посетитель получит HTTP ошибку 403 — access forbidden.

  5. Запретить доступа к файлам с несколькими типа расширений deny from all Запрещен доступ к файлам с расширением *.inc, *.conf и *.cfg. Хотя директива, по умолчанию, не работает с регулярными выражениями, но их можно включить поставив символ тильды(~) в опциях директивы. Синтаксис следующий: [тильда] [пробел] [далее_все_без_пробелов] Чтобы блокировать этот доступ, запишем следующее:
     RewriteRule ^.htaccess$ - [F]
    

    Это правило переводится так:
    Если кто-то пробует обращаться к файлу .htaccess, система должна произвести код ошибки ‘HTTP response of 403’ или ‘403 Forbidden — You don’t have permission to access /.htaccess on this server’.

    Конструкция ^.htaccess$ в этом регулярном выражении означает:
    ^ — якорь начала строки
    $ — якорь конца строки
    . — в регулярных выражениях точка ‘.’ обозначает мета-символ и должна быть защищена обратным слэшем (backslash), если Вы все-таки хотите использовать именно фактическую точку.

    Имя файла должно быть расположено точно между начальным и конечным якорем. Это будет гарантировать то, что только это определенное имя файла и никакое другое, сгенерирует код ошибки.
    [F] — специальный ‘запрещающий’ флажок (forbidden).
    [NC] — не учитывать регистр букв.
    [OR] — означает ‘или следующее условие’.

Определение кодировки

Определение кодировки, в которой сервер «отдает» файлы

AddDefaultCharset windows-1251

варианты: KOI8-R, UTF-8, Windows-1251

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

CharsetSourceEnc windows-1251

Установка пароля на директорию с помощью .htaccess

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

AuthType Basic
AuthName "Some Name"
AuthUserFile /www/some_login/www/htdocs/some_dir/.htpasswd
require valid-user

Путь /www/some_login/www/htdocs/some_dir/.htpasswd обозначает полный путь к файлу паролей на диске нашего сервера. Если, например, вы поместите файл .htpasswd (в нем будут пароли) в домашний каталог, куда вы попадаете, зайдя на сервер по FTP, то путь к этому файлу будет иметь вид /www/some_login/www/htdocs/some_dir/.htpasswd, где some_login — Ваш логин. В директиве AuthUserFile указываем абсолютный путь к файлу с логинами/паролями, который мы создадим чуть позже. Если вы создаете файл .htaccess на своем компьютере, а не сразу на сервере используя текстовый редактор, обратите особое внимание на то, что .htaccess должен передаваться по FTP строго в текстовом (ASCII) режиме.

Создаем файл паролей. Файл с паролями должен содержать строки вида login:password. Пароль должен быть зашифрован с использованием алгоритма MD5. Один из способов создать такой файл — воспользоваться программой, входящей в поставку Apache — htpasswd (на нашем сервере она находится в каталоге /usr/local/apache/bin, полный путь — /usr/local/apache/bin/htpasswd).

Рассмотрим, как создать файл паролей в unix shell прямо на сервере. Зайдем в shell и будем выполнять следующие команды:

htpasswd -mbc .htpasswd user1 7B1safkir

— создаем новый файл .htpasswd, в который добавляем запись для пользователя user1 с паролем, указанным в командной строке.

htpasswd .htpasswd user2

— добавляем в уже существующий файл .htpasswd пользователя user2, а пароль вводим вручную в ответ на соответствующий запрос программы.

После окончания заведения всех логинов файл нужно загрузить на сервер.

Задаем собственные страницы ошибок

Задать собственную страницу ошибок можно следующим образом:

ErrorDocument 404 http://www.domain.ru/404.php

IE игнорирует страницы размером меньше 512 байт.

Индексация директорий и поддиректорий

Чтобы избежать индексации поисковыми системами директорий и поддиректорий, необходимо прописать такую строку, к примеру:

DirectoryIndex index.php

Эта директива задает файл, который будет вызван при обращении к директории без указания имени файла.

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

DirectoryIndex index.html index.php index.shtml

Лично я предпочитаю переадресовывать с пустых директорий либо на главную страницу сайта, либо на какую-либо другую подходящую страницу. Например, директорию www.domain.ru/pic/ можно переадресовать на www.domain.ru.

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

Очень часто бывает, что веб-мастера нагло копируют контент с Вашего сайта вместе с рисунками, причем рисунки подгружаются с Вашего же сервера. Это создает лишний трафик, что, зачастую, приводит к ряду проблем. Как же защититься от таких веб-мастеров и не помешать поисковым роботам индексировать изображения? Все просто:

RewriteEngine on
RewriteCond %{HTTP_REFERER} .
RewriteCond %{HTTP_REFERER} !^http://([^.]+.)?site. [NC]
RewriteCond %{HTTP_REFERER} !google. [NC]
RewriteCond %{HTTP_REFERER} !search?q=cache [NC]
RewriteCond %{HTTP_REFERER} !msn. [NC]
RewriteCond %{HTTP_REFERER} !yahoo. [NC]
RewriteCond %{REQUEST_URI} !^/image.gif$
RewriteRule .(gif|jpg|png)$ /image.gif [NC,L]

image.gif — изображение, которое будет отображаться, вместо истинных изображений. Рекомендую в этом изображении отобразить Ваш логотип и ссылку на Ваш сайт.

Еще один варинат запрета доступа к картинкам с неразрешенных сайтов:

SetEnvIfNoCase Referer "^$" local_ref=1
SetEnvIfNoCase Referer "^http://(www.)?htmlweb.ru" local_ref=1
SetEnvIfNoCase Referer "^http://(www.)?images.yandex.ru" local_ref=1
SetEnvIfNoCase Referer "^http://(www.)?hghltd.yandex.com" local_ref=1

 Order Allow,Deny
 Allow from env=local_ref

Поисковые машини и разного рода сканеры создают коллосальный трафик на вашем сайте. Нижеприведенный блок кода позволит запретить доступ ботам на сайт.

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}

Теперь при запросе файла ‘robots.txt’ наш RewriteRule переадресует посетителя (робота) к обрабатывающему запросы скрипту robot.php. Кроме того, переменная передается скрипту, которая будет обработана в соответствии с вашими нуждами. ‘REQUEST_URI’ определяет имя запрашиваемого файла. В данном примере это — ‘robots.txt’. Скрипт прочтет содержание ‘robots.txt’ и отправит его web-браузеру или роботу поискового сервера. Таким образом, мы можем считать хиты посетителей и вести лог-файлы.

PHPSESSID

Для отключения добавления PHPSESSID к URL вставьте в начало index.php:

ini_set("session.use_trans_sid", 0);

 

Либо в .htaccess пропишите:

php_flag session.use_trans_sid Off

Директивы кеширования

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

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"

Запрет кеширования с помощью сервера Apache

Откройте файл конфигурации сервера Apache httpd.conf и раскомментируйте следующие строчки:

LoadModule expires_module modules/mod_expires.so
LoadModule headers_module modules/mod_headers.so
...
AddModule mod_expires.c
AddModule mod_headers.c

Впишите в .htaccess следующее:

# Запрещение кеширования в этой папке # Необходимо включение модулей # mod_headers.c и mod_expires.c # # Заголовок Cache-Control

Header append Cache-Control «no-store, no-cache, must-revalidate»

# Заголовок Expires

ExpiresActive On ExpiresDefault «now»

Необходимые заголовки будут передаваться автоматически, и специально их писать в PHP уже не нужно — кэш уже выключен!

 

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

# Разрешение кеширования в этой папке # Необходимо включение модулей # mod_headers.c и mod_expires.c # # Заголовок Cache-Control

Header append Cache-Control «public»

# Заголовок Expires

ExpiresActive On ExpiresDefault «access plus 1 hours» #ExpiresDefault «access plus 10 years»

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

ExpiresDefault «access plus 3 days»

Будьте осторожны при кешировании, т.к. при изменении файла, пользователь может получить новый вариант только через 3 дня!

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

Пропишите в своем файле .htaccess следующие строки:

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

Как разместить несколько сайтов на одном виртуальном хостинге?

Чтобы разместить два или более сайтов на одном виртуальном хостинге, вопреки отведенному вам тарифным планом количеству доменов необходимо в файле «.htaccess» прописать следующие строки:

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.

Поиск страниц больше чем в одном каталоге

Иногда необходимо позволить веб-серверу искать страницы больше чем в одном каталоге.

RewriteEngine on

#   во-первых попытаемся найти это в указанном месте/...
#   ...и если нашли то заканчиваем поиск:
RewriteCond         /your/docroot/dir1/%{REQUEST_FILENAME}  -f
RewriteRule  ^(.+)  /your/docroot/dir1/$1  [L]

#   во-вторых - попытаемся найти это в pub/...
#   ...и если нашли то заканчиваем поиск:
RewriteCond         /your/docroot/dir2/%{REQUEST_FILENAME}  -f
RewriteRule  ^(.+)  /your/docroot/dir2/$1  [L]

#   иначе продолжаем для других директив
RewriteRule   ^(.+)  -  [PT]

 

Виртуальные хосты пользователей

Если Вы хотите предоставлять адреса www.subdomain.domain.ru для страниц пользователей, Вы можете использовать следующий набор правил для преобразования http://www.subdomain.domain.ru/path во внутренний путь /home/subdomain/path:

RewriteEngine on
RewriteCond   %{HTTP_HOST}                 ^www.[^.]+.ru$
RewriteRule   ^(.+)                        %{HTTP_HOST}$1          [C]
RewriteRule   ^www.([^.]+).ru(.*) /home/$1$2

 

Повреждаются файлы при загрузке на сервер

Если при передаче файлов через формы (при указанном enctype=»multipart/form-data») бинарные данные повреждаются, пропишите в /cgi-bin/.htaccess директиву:

CharsetRecodeMultipartForms Off.

 

Ошибка загрузки SWF файлов.
Ошибки при обращении к страницам, содержащим ключевые слова,
типа $_REQUEST

Такое может происходить из-за установленного модуля в Apache. По умолчанию он блокирует в запросах строки с SQL аргументами и другими потенциально опасными командами.

Возможные сообщения об ошибке:

Forbidden

You don’t have permission to access /adm/index.php on this server. Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

или

Запрос небезопасен и был отвергнут.

Добавьте в .htaccess

SecFilterEngine Off SecFilterScanPOST Off

Для сообщения:

«POST /wp-admin/async-upload.php HTTP/1.1» 406 354 «-» «Shockwave Flash»

можно снять защиту только на загрузку файлов на сервер:

SecFilterEngine Off SecFilterScanPOST Off

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

Переменные сервера

Это переменные вида %{NAME_OF_VARIABLE}

где NAME_OF_VARIABLE может быть строкой взятой из следующего списка:

HTTP заголовки: соединение & запрос:  
HTTP_USER_AGENT
HTTP_REFERER
HTTP_COOKIE
HTTP_FORWARDED
HTTP_HOST
HTTP_PROXY_CONNECTION
HTTP_ACCEPT
REMOTE_ADDR
REMOTE_HOST
REMOTE_USER
REMOTE_IDENT
REQUEST_METHOD
SCRIPT_FILENAME
PATH_INFO
QUERY_STRING
AUTH_TYPE
 
внутренние сервера: системные: специальные:
DOCUMENT_ROOT
SERVER_ADMIN
SERVER_NAME
SERVER_ADDR
SERVER_PORT
SERVER_PROTOCOL
SERVER_SOFTWARE
TIME_YEAR
TIME_MON
TIME_DAY
TIME_HOUR
TIME_MIN
TIME_SEC
TIME_WDAY
TIME
API_VERSION
THE_REQUEST
REQUEST_URI
REQUEST_FILENAME
IS_SUBREQ

Эти переменные полностью соответствуют названным похожим образом MIME-заголовкам HTTP, и переменным сервера Apache или полям struct tm систем Unix. Те, что являются для mod_rewrite специальными включают:

IS_SUBREQ — Будет содержать текст «true» если запрос выполняется в текущий момент как подзапрос, «false» в другом случае. Подзапросы могут быть сгенерированны модулями которым нужно иметь дело с дополнительными файлами или URI для того чтобы выполнить собственные задачи.

API_VERSION — Это версия API модуля Apache (внутренний интерфейс между сервером и модулем) в текущей сборке сервера, что определено в include/ap_mmn.h. API версия модуля соответствует используемой версии Apache (для версии Apache 1.3.14, к примеру это 19990320:10), однако это в основном интересно авторам модулей.

THE_REQUEST — Полная строка HTTP запроса отправленная браузером серверу (т.е., «GET /index.html HTTP/1.1»). Она не включает какие-либо дополнительные заголовки отправляемые браузером.

REQUEST_URI — Ресурс, запрошенный в строке HTTP запроса.

REQUEST_FILENAME — Полный путь в файловой системе сервера к файлу или скрипту соответствующим этому запросу.

Примечания:

  1. Переменные SCRIPT_FILENAME и REQUEST_FILENAME содержат одинаковые значения, т.е., значение поля filename внутренней структуры request_rec сервера Apache. Первое имя это просто широко известное имя переменной CGI в то время как второе это постоянная копия REQUEST_URI (содержащая значение поля uri структуры request_rec).
  2. Есть специальный формат: %{ENV:переменная} где переменная может быть любой переменной окружения. Это ищется во внутренних структурах Apache и (если там нет) с помощью вызова getenv() из процесса Apache сервера.
  3. Есть специальный формат: %{HTTP:заголовок} где заголовок может быть любым именем HTTP MIME-заголовка. Это ищется в HTTP запросе. Пример: %{HTTP:Proxy-Connection} значение HTTP заголовка «Proxy-Connection:».
  4. Есть специальный формат %{LA-U:переменная} опережающих запросов которые производятся внутренним (основанном на URL) подзапросом для определения конечного значения переменной. Используйте это когда вы хотите использовать переменную для преобразований, которая реально определяется позднее, в какой-либо фазе API, и таким образом недоступна на данном этапе. Для примера когда вы хотите преобразовать соответственно переменной REMOTE_USER из контекста сервера (файл httpd.conf) вы должны использовать %{LA-U:REMOTE_USER} потому что эта переменная устанавливается в фазах авторизации которые идут после фазы трансляции URL в которой и работает mod_rewrite. С другой стороны, по причине реализации работы mod_rewrite в контексте каталога (файл .htaccess) через Fixup фазу API и из-за того, фазы авторизации идут до этой фазы, вы просто можете там использовать %{REMOTE_USER}.
  5. Есть специальный формат: %{LA-F:переменная} который создает внутренний (основанный на имени файла) подзапрос для определения конечного значения переменной. В основном это то же самое что и формат LA-U приведенный выше.

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

Содержание

  1. Где лежит htaccess
  2. Как создать чистый htaccess
  3. Что нужно добавить в htaccess обязательно
  4. Стандартный htaccess
  5. 301 редирект на https
  6. Как должен выглядеть правильный htaccess
  7. Что еще можно подключить в htaccess
  8. Кэш браузера
  9. Gzip сжатие
  10. Для безопасности и защиты wp-config
  11. Вывод настройки

Htaccess обязательно должен находится в корневой папке сайта, вместе с каталогами типа wp-admin. У меня лежит как показано на снимке, иначе работать не будет, сервер его не найдет.

Где находится htaccess
Где располагается объект

Как создать чистый htaccess

По умолчанию WordPress 5 должен создать htaccess, либо хостер добавляет его в каталог ресурса. Но бывает, что отсутствует, тогда создаем документ на компьютере с названием .htaccess с помощью стандартного блокнота.

Делаем файл доступов в блокноте
Создать в блокноте
  1. В меню выбираем Файл > Сохранить как
  2. Появляется окно, в нем вписываем название и папку для сохранения
  3. Нажимаем на Сохранить

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

Что нужно добавить в htaccess обязательно

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

На данной стадии посмотрим, что изначально должно быть прописано и добавим обязательные директивы, без которых нельзя начинать работу с сайтом на WordPress.

Стандартный htaccess

Если htaccess не было изначально, то нужно добавить стандартный код, который WordPress прописывает при установке.

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

301 редирект на https

Если к ресурсу прикреплен SSL сертификат, то необходимо занести после #BEGIN WordPress конфигурацию 301 редиректа.

RewriteEngine On 
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Как должен выглядеть правильный htaccess

В итоге правильный код htaccess должен выглядеть так:

# BEGIN WordPress
RewriteEngine On 
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Он проверен на множестве сайтов и работает безотказно. Никаких дублей, дыр в безопасности и остальных ошибок не наблюдали.

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

Разработчики WP сделали необходимые настройки в ядре и теперь не нужно вписывать в серверный документ непонятные строчки. В большинстве случаев блог перестанет отвечать, потому что в htaccess занесено много правил и они могут конфликтовать.

Что еще можно подключить в htaccess

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

  • Кэш браузера
  • Gzip сжатие
  • Защита wp-config, нет ли доступа его просмотреть

Кэш браузера

Для начала проверим активен ли кэш браузера на сайте, переходим на сервис webpagetest, вводим в поле url главной страницы и находим start scan.

Определяем ошибки в серверной оптимизации
Проверка функций блога

Ждем процесса проверки и смотрим на результаты. Ищем строчку Leverage browser caching и определяем кэшируются ли документы. В моем случае да, исключение – метрика, аналитика и vk, на них повлиять нельзя.

Определение наличия кэша браузера
Есть ли кеш браузера

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

<ifModule mod_headers.c>
<FilesMatch ".(html|htm)$">Header set Cache-Control "max-age=43100</FilesMatch>
<FilesMatch ".(js|css|txt)$">Header set Cache-Control "max-age=604700</FilesMatch>
<FilesMatch ".(flv|swf|ico|gif|jpg|jpeg|png)$">Header set Cache-Control "max-age=2591000"</FilesMatch>
<FilesMatch ".(pl|php|cgi|spl|scgi|fcgi)$">Header unset Cache-Control</FilesMatch>
</IfModule>

Gzip сжатие

Gzip сжатие потеряло актуальность при появлении AMP и Турбо страниц, но пользоваться ими нужно. Проверяем тем же сервисом webpagetest, только ищем строчку «Use gzip compression for transferring compressable responses».

Есть ли сжатие gzip на сервере WordPress
Наличие gzip сжатия

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

<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 mime ^application/x-javascript.*
  mod_gzip_item_include mime ^text/.*
  mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
  mod_gzip_item_exclude mime ^image/.* 
  mod_gzip_item_include handler ^cgi-script$
</ifModule>

Такими встроенными возможностями обладают большинство провайдеров, например:

  • Beget
  • Timeweb
  • Masterhost

Для безопасности и защиты wp-config

В 99,9% проблемы нет, но перестраховаться стоит. Заходим на сайт и приписываем к адресу /wp-admin.php, смотрим что выдает браузер.

Показан ли wp-config
Отображение wp-config

Должна открыться пустая страница или произойти 301 переадресация на главную. Если покажется код документа, то нужно срочно его закрывать, просим помощи в поддержке, или прописываем вот такой текст.

<Files wp-config.php>
order allow,deny
deny from all
</Files>

Посетители спрашивают, а нужно ли добавлять правила для плагинов WooCommerce, BBPress, Elementor и им подобным. Отвечу – нет, все встроено в сами плагинах. Будет полезно прочитать как создавать robots txt. В заключении дам видео инструкцию, чтобы сделать процесс более понятным.

Вывод настройки

Настройка htaccess в WordPress не сложная, потому что разработчики и хостер сделали все условия, чтобы снизить количество ошибок. В статье показал правильный вариант, в котором только стандартные директивы и перенаправление на https, остальные функции должны быть встроены и работать изначально. В любом случае сначала пишем в поддержку, и только потом делаем сами.

Пожалуйста, оцените материал:



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



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

В статье рассказывается:

  1. Что такое .htacces
  2. Применение .htaccess
  3. Пошаговая инструкция создания файла .htaccess
  4. Синтаксис .htaccess
  5. Работа с .htaccess
  6. Пройди тест и узнай, какая сфера тебе подходит:
    айти, дизайн или маркетинг.

    Бесплатно от Geekbrains

Что такое .htacces

Служебный файл с таким именем хранит расширенные параметры работы с веб-серверами (Apache и т. п.). Он необходим для корректного функционирования любого сайта.

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

Тогда именно данный документ будет более приоритетным, нежели общий. Управлять всеми файлами, загруженными на сервер, можно с помощью файлового менеджера с FTP-клиентом (FileZilla, Total Commander и др.). Также подобную возможность предоставляют некоторые хостинг-провайдеры через встроенную панель управления.

Что такое .htacces

Что такое .htacces

Файл .htaccess позволяет обычному пользователю (не администратору) вносить изменения в настройки ресурса. Этой возможностью пользуются, например, SEO-оптимизаторы и программисты. Основной настроечный файл httpd.conf защищен правами доступа и доступен для редактирования лишь администратору сайта, так как производимые изменения напрямую влияют на жизнеспособность ресурса.

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

Перенаправления

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

Redirect 301 / http://site.com/ (всегда перенаправляет посетителя на site.com)

Redirect 302 / http://site.com/ (перенаправление на указанный сайт временное)

Блокировка доступа

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

deny from 146.0.71.199 (блокировка для IP-адреса 146.0.71.199)

Автоматическое подключение файлов

Благодаря использованию возможностей SSI (Server Side Include) и прописанным инструкциям в .htaccess html или php файлы будут подключены автоматически. При этом они добавляются в начало или конец документа исключительно по запросу пользователя, а в самом документе заранее не подключаются.

Скачать файл

php_value auto_prepend_file «/mysite/functions.php» (подсоединение файла functions.php из каталога /mysite к началу документа)

php_value auto_append_file «/mysite/footer.html» (подсоединение файла footer.html из каталога /mysite к концу документа)

Настройка страниц с ошибками

На указанные в файле .htaccess страницы посетитель будет перенаправляться, если на сервере возникают определенные ошибки.

ErrorDocument 404 /notfound.html (перенаправление пользователя на notfound.html в случае появления ошибки 404)

ErrorDocument 500 /server.html (перенаправление пользователя на server.html в случае появления ошибки 500)

Кэширование

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

Помимо указанных основных возможностей существуют дополнительные функции данного документа. Перечислим их ниже.

  • Исправление кодировки

Кодировка определяет формат печатных символов, которые видит пользователь и воспринимает как текст. Чаще всего используются UTF-8 и Windows-1251. Нечитаемые символы означают, что установлена неверная кодировка. Исправляется эта проблема с помощью файла .htaccess.

pdf иконка

Топ-30 самых востребованных и высокооплачиваемых профессий 2023

Поможет разобраться в актуальной ситуации на рынке труда

doc иконка

Подборка 50+ ресурсов об IT-сфере

Только лучшие телеграм-каналы, каналы Youtube, подкасты, форумы и многое другое для того, чтобы узнавать новое про IT

pdf иконка

ТОП 50+ сервисов и приложений от Geekbrains

Безопасные и надежные программы для работы в наши дни

Уже скачали 19549 pdf иконка

  • Изменение главной страницы

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

Изменение главной страницы

Изменение главной страницы
  • Создание семантического URL

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

  • Установка пароля на каталог

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

  • Настройка параметров PHP

Данный язык программирования в большинстве случаев применяется в рамках разработки динамических сайтов. Настройка языка производится в файле php.ini, однако через .htaccess PHP также может быть настроен в качестве отдельного модуля. Последний способ удобен, так как управление конфигурацией осуществляется в одном файле.

  • Ограничение доступа к ресурсу

Как уже упоминалось, документ позволяет закрыть доступ к сайту с определенных IP-адресов. Благодаря этому обеспечивается защита от возможных хакерских атак. Например, сервер становится уязвимым при DdoS-атаках, когда процессор не в состоянии обработать огромное число запросов, поступающих с одного или нескольких IP.

  • Ограничение доступа для поисковых роботов

Поисковые боты индексируют сайты, собирая необходимую для этого информацию. В итоге индексируемые ресурсы появляются в поиске. Но существуют также нежелательные роботы (например, SolomonoBot). С помощью файла .htaccess сайт можно закрыть для определенных ботов, указанных по User-Agent.

Итак, перечисленный функционал дает пользователю возможность тонко настраивать сайты, не изменяя при этом общие параметры сервера. Оптимизаторам также можно давать доступ к единому конфигурационному файлу, через который они могут свободно менять настройки SEO.

Пошаговая инструкция создания файла .htaccess

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

Пошаговая инструкция создания файла .htaccess

Пошаговая инструкция создания файла .htaccess

Нужно иметь в виду, что панель управления cPanel по умолчанию скрывает все файлы с точкой спереди, включая .htaccess. Их отображение нужно включить, следуя инструкции.

Развитие искусственного интеллекта: история, современные тенденции

Читайте также

Если сайт создается вручную, этот файл, как и любой другой, можно создать самостоятельно на компьютере, а после загрузить на хостинг. В среде Windows это делается крайне просто:

  1. Нужно открыть любой простейший текстовый редактор (например, Блокнот).
  2. Далее пустой файл следует сохранить путем нажатия комбинации Ctrl + Shift + S или выбора пункта «Сохранить как…» в меню «Файл».
  3. В соответствующее поле вписывается имя .htaccess, файл сохраняется. Перед этим нужно включить отображение всех файлов в поле «Тип файла».

В конце имени может автоматически появиться стандартное расширение txt. Его нужно удалить, открыв Проводник и сняв галочку около пункта «Расширения имен файлов» во вкладке Вид.

Готовый .htaccess без расширения txt загружается на хостинг в корневой каталог сайта. В панели управления провайдера для этого нужно проделать следующее:

  1. В подразделе «www» раздела «Менеджер файлов» выбирается зарегистрированный домен.
  2. Открывается окно загрузки путем нажатия на кнопку «Загрузить», расположенную сверху на панели иконок.
  3. В окне выбирается недавно созданный файл и загружается нажатием на кнопку ОК.

Синтаксис .htaccess

Встроенный язык настроек весьма прост. Каждая команда должна занимать отдельную строку. Комментарии обозначаются спереди символом #. Они помогают другим разработчикам и SEO-оптимизаторам понять смысл той или иной директивы. Все, что находится правее «решетки», игнорируется сервером и не воспринимается как команда.

pdf иконка

Точный инструмент «Колесо компетенций»

Для детального самоанализа по выбору IT-профессии

pdf иконка

Список грубых ошибок в IT, из-за которых сразу увольняют

Об этом мало кто рассказывает, но это должен знать каждый

doc иконка

Мини-тест из 11 вопросов от нашего личного психолога

Вы сразу поймете, что в данный момент тормозит ваш успех

Регистрируйтесь на бесплатный интенсив, чтобы за 3 часа начать разбираться в IT лучше 90% новичков.

Только до 13 февраля

Осталось 17 мест

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

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

  • ^ — начало строки;
  • $ — конец строки;
  • . — любой символ, за исключением $;
  • — любое количество символов;
  • ? — один определенный символ;
  • [0-9] — любая цифра;
  • [a-z] — любая буква латиницы;
  • | — оператор «или» для выбора одной группы из двух;
  • () — оператор группировки символов.

Перечислим базовые переменные:

  • %{HTTP_USER_AGENT} — сведения об используемом браузере и операционной системе (передается значение из поля User-agent браузера);
  • %{REMOTE_ADDR} — IP-адрес пользователя;
  • %{REQUEST_URI} — запрашиваемый идентификатор URI;
  • %{QUERY_STRING} — параметры запроса после символа «?».

Работа с .htaccess

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

Работа с .htaccess

Работа с .htaccess

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

  • DirectoryIndex index.php

Ключом здесь служит DirectoryIndex, а значением — index.php (страница, назначенная главной на конкретном сайте).

Добавить любую команду в конфигурационный файл очень просто. Для этого нужно:

  • открыть существующий файл в корневом каталоге (или создать в нужном подкаталоге новый, чтобы действие директивы распространялось только на содержимое этой папки);
  • скопировать требуемую команду из источника и добавить ее в конфигурацию;
  • в самой директиве поменять параметры сайта на актуальные (доменное имя, страницу и т. д.);
  • закрыть файл, сохранив предварительно изменения.

В процессе редактирования нужно внимательно вставлять и исправлять команды. Некорректная их работа может привести к сбою функционирования всего сайта.

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

Ограничение доступа к сайту, конкретному каталогу или отдельному файлу

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

  • Закрытие всего сайта осуществляется добавлением следующих строк:

Order Deny,Allow

Deny from all

  • Закрытие конкретной папки производится созданием отдельного файла внутри нее и добавлением в этот файл тех же строк.
  • Можно закрыть доступ для всех пользователей за исключением одного или нескольких указанных IP-адресов:

Order Deny,Allow

Deny from all

Allow from 123.123.123.123

В данном случае на пользователей с адресом 123.123.123.123 запрет не распространяется.

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

<Files example.exe>

Order Deny.Allow

Deny from all

</Files>

Здесь доступ закрывается конкретно для файла example.exe.

Ограничение для файлов определенного типа

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

Это делается добавлением конфигурации такого формата:

<Files «.(txt|pdf|jpg)$»>

Order Deny.Allow

Deny from all

</Files>

В показанном примере доступ запрещен для файлов с расширениями txt, pdf и jpg.

Запрет просмотра каталогов

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

Options -Indexes

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

Options +Indexes

Настройка в .htaccess переадресации с кодом 301

Чаще всего пользователи перенаправляются с одного домена на другой. Необходимость в этом возникает, например, при переезде сайта на другое доменное имя вследствие ребрендинга или иных причин. Выполняется переадресация также командами .htaccess. Редирект на https с http производится аналогичным образом.

В качестве примера приведем наиболее часто применяемую конструкцию. Итак, для редиректа страницы .htaccess должен содержать следующие строки:

RewriteEngine On

RewriteCond %{HTTP_HOST} site1.ru

RewriteRule (.*) http://site2.ru/$1 [R=301,L]

Здесь пользователь перенаправляется с исходного домена site1.ru на целевой site2.ru.

Обработка ошибок

Страницы ошибок в .htaccess, а также коды этих ошибок указываются директивой ErrorDocument. Формат следующий:

ErrorDocument 404

http://site.ru/error/404.html

Первый язык программирования: разбираемся в особенностях

Читайте также

Здесь:

  • ru — доменное имя сайта;
  • error — каталог, содержащий страницу ошибки (при наличии таковой);
  • html — имя страницы ошибки.

Обработка ошибок

Обработка ошибок

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

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

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Как исправить gif картинку
  • Как исправить fstab до загрузки
  • Как исправить frame time
  • Как исправить fatal error steam must be running to play this game
  • Как исправить fastboot на редми

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии