Использование на хостинге файла .htaccess

Kate

Administrator
Команда форума
Название файла .htaccess (сокращение от “hypertext access”) начинается с точки. Это означает, что файл - служебный и не относится непосредственно к файлам сайта, а используется для настроек web-сервера, является частью конфигурации web-сервера Apache.

Благодаря .htaccess пользователи виртуального хостинга могут настраивать работу отдельных папок, не имея доступа к основному файлу конфигурации web-сервера Apache (httpd.conf). К файлу httpd.conf имеют доступ лишь суперпользователи (root), соответственно, редактировать его могут лишь владельцы VPS/VDS и выделенных серверов.

При изменении файла новый набор настроек сразу начинает работать и не требует перезагрузки web-сервера.

74096cdfbbea4816e5a425c070b07bd8.jpg


Ограничения использования .htaccess у провайдера хостинга

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

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

Использование .htaccess на виртуальном или выделенном сервере​

При использовании услуги собственного VPS/VDS или выделенного сервера у вас есть полный доступ к изменению настроек web-сервера Apache с помощью редактирования его основных конфигурационных файлов. При этом применение файлов .htaccess также остается удобной возможностью для внесения корректив в работу сервера без перезагрузки.

Для редактирования файлов .htaccess из командной строки сервера используйте текстовые редакторы vi, nano, mcedit.

Схема работы .htaccess

1. Когда web-сервер получает запрос по протоколу HTTP (или HTTPS) к какому-либо файлу на сервере (определенной странице сайта), он предварительно проверяет наличие файла .htaccess в той же папке (или в одной из вышестоящих по иерархии каталогов папок, начиная с корневого каталога сайта).
2. Если файл найден, то web-сервер считывает из него конфигурационные команды и применяет их в своей работе.

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

Чтобы Apache использовал в своей работе файл .htaccess, необходимо для конкретной директории в конфигурации web-сервера указать директиву “AllowOverride All”. Её нужно прописывать в файл конфигурации web-сервера Apache (httpd.conf) - /etc/httpd/conf/httpd.conf или /etc/apache2/apache2.conf (это зависит от версии веб-сервера и ОС).

Директива должна иметь вид:

<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
/var/www/ по необходимости нужно заменить на свою директорию сайта.

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

Если вывод будет Syntax OK, то выполните: service httpd restart.

Провайдеры по умолчанию включают эту настройку для папок с сайтами пользователей на виртуальном хостинге, а владельцам VPS/VDS и выделенных серверов нужно самостоятельно проверить у себя наличие такой конфигурации в Apache.

Имя служебного файла в Apache может меняться. Этим управляет директива AccessFileName. Например, если указать в конфигурации Apache директиву “AccessFileName .config”, то web-сервер будет вместо .htaccess искать файлы .config. Но название файла .htaccess стало индустриальным стандартом, и поэтому на хостингах используется именно этот файл.

Многие CMS, как, например, Wordpress, самостоятельно при установке на хостинг размещают файл .htaccess в корневой папке сайта для настройки своей работы.

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

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

Как выглядит .htaccess?

.htaccess - это текстовый файл.

Каждая строка файла означает определенную команду конфигурации (директиву) Apache.

Пустые строки игнорируются.

Строки, которые начинаются с символа решетки “#”, - это комментарии, и они не влияют на конфигурацию web-сервера.

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

# убираем слэш в конце адреса
RewriteCond %{REQUEST_URI} .+/$ [NC]
RewriteRule ^(.+)(/)$ $1 [L,R=301]
Как редактировать .htaccess?

Файл .htaccess на хостинге вы сможете отредактировать с помощью FTP-доступа, например, используя FTP-клиент Filezilla.

Для этого нажмите правой кнопкой мыши на файл, чтобы открыть контекстное меню с пунктом “Просмотр/Правка”.

e7ca80631ea1b2f6d40747629971614b.jpg


Filezilla использует для редактирования текстовый редактор Notepad++, который должен быть установлен на локальный компьютер.

c8714684176b49001af5f339995208fd.png


Мы не рекомендуем для редактирования файла .htaccess и других конфигурационных файлов использовать “Блокнот” Windows.

Иногда, если применяются устаревшие FTP-клиенты, .htaccess не показывается в списке файлов. Это происходит из-за того, что его название начинается с точки. Следует обновить FTP-клиент или проверить его настройки на предмет отключения фильтрации файлов, начинающихся с точки. При использовании Filezilla таких проблем не возникает.

Как мы писали выше, файл .htaccess автоматически генерируется в папке сайта на хостинге вместе с созданием сайта у некоторых CMS, таких, как Wordpress. Но есть движки, которые размещают этот файл под другим названием. Например, Joomla создает файл htaccess.txt, и его нужно переименовывать вручную.

В случае, если файла в папке сайта нет, создайте его самостоятельно.

1. Для этого откройте блокнот (notepad), добавьте туда нужные команды и сохраните как текстовый документ с названием .htaccess.
2. Переименуйте сохраненный файл, убрав расширение “.txt”.
3. С помощью FileZilla загрузите его через FTP в папку с сайтом.

Также .htaccess можно отредактировать из панели управления хостингом.

1. Для редактирования .htaccess в панели управления зайдите в менеджер файлов.
2. Откройте корневую папку сайта public_html, найдите в ней файл .htaccess и отредактируйте его во встроенном редакторе.

a51344f87e26d7afc413b0c946fcc455.jpg


Так выглядит работа с .htaccess у провайдера Beget

Ниже будут рассмотрены наиболее востребованные из настроек в контексте web-хостинга.

Механизм перенаправления запросов (mod_rewrite)​

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

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

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

Команду “RewriteEngine on” в файле .htaccess достаточно использовать лишь один раз.

В своей работе механизм перенаправления mod_rewrite применяет специальную технологию программирования regexp для сравнения запросов с определенным шаблоном.

Склейка разных адресов одного сайта​

При настройке сайта на хостинге можно указать дополнительные доменные имена для сайта - алиасы (псевдонимы), например, www.mysite.ru для сайта mysite.ru.

Для поисковых систем важно знать, какой из адресов сайта является основным, а какие - дополнительными. Для того, чтобы точно указать адрес основного сайта используют механизм “склейки” адресов. Он заключается в том, что браузер посетителя при заходе на дополнительный адрес сайта получает от web-сервера команду перенаправления на основной адрес - 301 redirect.

301 - это специальный код ответа web-сервера, который обозначает, что данный адрес (URL) страницы является постоянно переадресуемым на другой URL, являющийся основным. И в будущем для доступа к данной странице следует использовать именно основной URL.

Для настройки постоянного 301-редиректа с адреса www.mysite.ru на mysite.ru нужно использовать следующий набор команд в .htaccess:

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

Перенаправление с HTTP-версии сайта на HTTPS-версию​

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

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

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Перенаправление страницы на другой адрес (URL)​

Чтобы перенаправить всех посетителей определенной страницы сайта на другую, настройте в .htaccess специальную директиву Apache “Redirect”:

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

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

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

RewriteCond %{REQUEST_URI} (.*/[^/.]+)($|\?)
RewriteRule .* %1.html [R=301,L]
RewriteRule ^(.*)/$ /$1.html [R=301,L]
Для того, чтобы убрать .html из URL, запустите команду:

RewriteRule (.*)\.html$ $1 [R=301,L]
Иногда для правильной обработки страниц поисковыми системами требуется убрать слэш (символ “/”) в конце адреса страницы.

Например, было mysite.ru/page/, стало mysite.ru/page.

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

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

Подмена страниц на сервере​

С помощью .htaccess можно проводить подмену страниц сайта на сервере. То есть пользователь открывает в браузере страницу mysite.ru/page1.html, а сервер вместо этой страницы отдает пользователю файл page2.html.

Такую настройку можно получить с помощью кода в .htaccess:

RewriteRule ^page1\.html$ /page2.html [L]
Это “серая” методика, и мы рассказываем о ней, чтобы вы знали, как это делается, но мы не рекомендуем ее применять.

Изменение страниц ошибок с помощью .htaccess​

Если web-сервер не находит нужный файл (страницу) при запросе к сайту по определенному адресу, то он отвечает специальной ошибкой 404. Используемая по умолчанию страница с ошибкой 404 малоинформативна.

924236d826740d0f2e2d7e2bfe6fc4ec.jpg


То же происходит в случае ошибок 400 (неправильный запрос), 500 (ошибка сервера) и других распространенных ошибочных состояний web-сервера.

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

Например, на сайте ru.hostings.info используется такая страница обработки ошибки 404.

443ec331279465e56fd404e5d071fbf2.png


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

Если нужно указать специальную страницу для обработки ошибки 403 (“доступ запрещен”), то нужно будет указать также текстовое сообщение, которое будет показано посетителю:

ErrorDocument 403 "Access forbidden / Доступ запрещен"

Настройки безопасности сайта через файл .htaccess​

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

Защита сайта от атак​

#Включает отслеживание сим-ссылок
Options +FollowSymLinks
#Запускает url_rewriting
RewriteEngine On
#Блокирует все ссылки, содержащие <script>
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
#Блокирует все скрипты, которые пытаются изменить переменные PHP Globals:
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
#Блокирует все скрипты, которые пытаются изменить переменную _REQUEST:
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
#Перенаправляет все подобные попытки на страницу с ошибкой 403 - запрещено
RewriteRule ^(.*)$ /403.html [F,L]
Эти фильтры могут быть дополнены, в зависимости от используемой CMS.

Web-сервер Apache с такой настройкой .htaccess начинает работать как программное обеспечение с функционалом Web Application Firewall (WAF).

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

Блокировка доступа пользователей по IP​

Применяется с целью защиты от:

  • спамеров;
  • нежелательный посетителей.
Изредка используется для предотвращения хакерских атак и помогает при защите сайта от DDoS-атаки (большого количества запросов, отправляемых с одного IP-адреса).

Синтаксис .htaccess для блокировки следующий:

allow from all
#Список нежелательных IP адресов
deny from 164.186.15.116
deny from 124.153.34.144

Защита папок сайта паролем​

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

Синтаксис для .htaccess:

#Protect Directory
AuthName "Restricted access"
AuthType Basic
AuthUserFile /home/username/example.com/.htpasswd
Require valid-user
Предварительно следует создать файл с паролем при помощи команды:

htpasswd -c /home/username/example.com/.htpasswd admin

Дополнительные сценарии использования .htaccess​

Изменение главной (индексной) страницы сайта​

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

Защита сайта от кражи изображений​

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

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

Options +FollowSymlinks
#Запрещает кражу картинок
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?mysite.ru/ [nc]
RewriteRule .*.(gif|jpg|png)$ http://mysite.ru/images/stop_stealing.gif[nc]
- это адрес (URL) изображения, которое специально создает владелец сайта. Оно содержит текст, наподобие "не крадите картинки с чужих сайтов", чтобы показать другим web-мастерам нежелательность использования графических файлов изображения с его сайта.

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

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

Защищает файл myfile.txt
<files myfile.txt>
order allow,deny
deny from all
</files>

Запрет доступа ко всем файлам с конкретным расширением​

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

<Files "\.(txt)$">
Order Deny,Allow
Deny from all
</Files>
В данном примере запрещается доступ ко всем файлам с расширением .txt

Блокирование посетителей, в зависимости от заголовка User-Agent​

User-Agent - это специальный заголовок протокола HTTP, с помощью которого браузер при запросе страницы указывает свое название и версию.

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

Для блокировки доступа к сайту, в зависимости от заголовка User-Agent, используется следующий код в .htaccess:

#Перечень User Agent-ов для блокировки:
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​

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

  • кодировка;
  • сжатие;
  • кэширование.

Изменение кодировки сайта через .htaccess​

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

В настоящее время для web-сайтов наиболее часто используется универсальная кодировка UTF-8, но встречаются страницы, созданные на кириллических кодировках Windows-1251 или KOI8-r.

Обычно кодировку указывают в метатегах заголовка HTML-кода страницы:

<meta http-equiv="content-type" content="text/html; charset=Windows-1251">

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

AddDefaultCharset WINDOWS-1251
Чтобы сервер автоматически перекодировал в нужную кодировку все файлы, которые на него загружаются, нужно применять следующие команды:

CharsetDisable on
CharsetSourceEnc WINDOWS-1251

Управление настройками сжатия​

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

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

<IfModule mod_deflate.c>
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
<ifmodule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_item_include file \.js$
mod_gzip_item_include file \.css$ </ifmodule>
</IfModule>
или

<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>
Какой именно вариант лучше использовать на конкретном хостинге, можно проверить, сравнив скорость загрузки сайта при разных настройках.

Настройка HTTP-кэширования на сервере​

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

Настроить HTTP-кэширование для сайта можно с помощью следующего кода в .htaccess:

<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 30 days"
ExpiresByType image/jpeg "access plus 30 days"
ExpiresByType image/png "access plus 30 days"
</IfModule>
В параметре "access plus X days" устанавливается конкретный срок хранения файлов на компьютере пользователя. По истечении этого срока при запросе к сайту файлы будут снова загружены с сервера.

Оптимальный срок хранения файлов в кэше - от семи дней до месяца, в зависимости от конкретного типа файлов.

Настройка параметров PHP через файл .htaccess​

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

Для этого используются две команды:

  • php_value name on/off - для логических значений (например, включить\выключить);
  • php_flag name value - для установки числовых значений или текстовых значений.
Пример использования этих команд в .htaccess:

php_flag name1 on # включает параметр конфигурации PHP name1
php_flag name2 off # выключает параметр конфигурации PHP name2
php_value name value #устанавливает параметр PHP name в значение value
Для установки значения флага PHP register_globals в значение off используется команда:

php_flag register_globals off
Другие полезные конфигурационные параметры PHP, которыми можно управлять через .htaccess:

Для использования с php_flag

  • display_startup_errors - управляет выводом на экран ошибок, которые происходят при инициализации PHP.
  • display_errors - управляет выводом на экран ошибок PHP.
  • log_errors - управляет записью лога ошибок PHP в файл.
Для использования с php_value

  • error_log - устанавливает название файла лога ошибок PHP.
  • output_buffering - управляет буферизацией вывода данных.
  • upload_max_filesize - устанавливает максимальный размер загружаемого файла.
  • post_max_size - задает максимальный размер пересылаемой почты.
  • sendmail_from - задает адрес e-mail для отправки почты с помощью PHP.
  • auto_prepend_file - задает файл, который будет добавлен в начало каждого PHP-скрипта.
  • auto_append_file - задает файл, который будет добавлен в конец каждого PHP-скрипта.
Обратите внимание: не все провайдеры хостинга разрешают менять настройки PHP через .htaccess. Использование любой директивы для настройки РНР напрямую зависит от версии РНР, которая установлена на сервере, поэтому, если какая-то директива не отработала или ее использование привело к появлению ошибки на сайте, то следует обращаться в техподдержку провайдера.

Источник статьи: https://ru.hostings.info/schools/htaccess.html
 
Сверху