коментариев
Поделиться статьей:

Файл .htaccess -  все не так сложно, как кажется.

Serhii Petruk 27.10.2015 43959 на прочтение 19 минут

.htaccess - что это такое ?
Перенаправления средствами .htaccess.
# Полное перенаправление с текущего сайта
# Переадресация с конкретного каталога или же файла на аналогичные другого сайта
# Перенаправление со всех ссылок с *.html  на *.php
# Переадресация URL с www на без www
# Переадресация URL с без www на www
# Переадресация доменного имени с https на http
# Переадресация доменного имени домена с http на https
Индексные страницы и управление ими
# Запрет вывода перечня файлов в текущем каталоге
#  Разрешение вывода  перечня файлов в текущем каталоге
# Вывод перечня файлов в текущем каталоге за исключением указанного формата
# Указание индексного файла
Ошибки и их обработка в .htaccess
# Установка личных страниц распространенных ошибок
Управление кодировкой
#Установить следующую кодировку для всех страниц выдаваемых веб-сервером
# Установить следующую кодировку всем загружаемым файлам на сервер
# Отключение правил принудительной установки  кодировкУправление кодировкойи
Настройки доступа
# Закрытие для конкретного ip адреса доступа к данным расположенным в текущей директории и последующем дереве директорий
# Закрытие доступа всем, открыть только для определенного ip адреса
# Открытие доступа к определенному файлу только с конкретного ip
# Разрешение доступа к файлом определенного расширения только для конкретного

 

.htaccess - что это такое ?

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

Для размещения и стабильной работы вашего сайта вы можете арендовать сервер или VPS.

Перенаправления средствами .htaccess.

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

# Полное перенаправление с текущего сайта

Redirect / http://www.examplesite.com
# http://www.examplesite.com - URL, на который мы перенаправляем запросы

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

# Переадресация с конкретного каталога или же файла на аналогичные другого сайта

Redirect /hosting http://www.examplesite.com
Redirect /hosting/vps.html http://www.examplesite.com/vps-vds/
Redirect 301 /domain http://www.examplesite.com/client/domainchecker.php
теперь введя http://ваш_сайт.ua/hosting, откроется сайт  http://www.examplesite.com. В последней строке для переадресации будет присвоен 301-ый код, обозначающий что документ постоянно перемещен.

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

# Перенаправление со всех ссылок с *.html  на *.php

RedirectMatch /(.*)\.html$ /$1.php

Директивы используемые для сложной переадресации (использование mod_rewrite).

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

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

RewriteCond - директива определяющая условия, при которых выполняется преобразования. RewriteCond задает нужные условия, для отдельных  правил. Всегда перед использованием директивы RewriteRule расположены одна, а зачастую и несколько директив типа  RewriteCond. Последующие после них правила преобразования будут использоваться только если Url-ы соответствуют прежде установленным условиям директивы, а также для условий дополнительных директив.

Теперь рассмотрим общераспространённые вариации для их использования.

# Переадресация URL с www на без www

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

# Переадресация URL с без www на www

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

Переадресация URL доменного имени  с https на http и обратно.

Для перенаправления, чтоб данные правила работали корректно, должен использоваться в серверной конфигурации только  веб-сервер apache. Если же используется связка Nginx+Apache будут возникать ошибки по причине циклической переадресации. По этому редирект необходимо будет устанавливать непосредственно в конфигурации Nginx.

# Переадресация доменного имени с https на http

RewriteEngine On
RewriteCond %{SERVER_PORT} ^443$ [OR]
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ http://www.examplesite.com/$1 [R=301,L]

# Переадресация доменного имени домена с http на https

RewriteEngine On
RewriteCond %{SERVER_PORT} ^80$ [OR]
RewriteCond %{HTTP} =on
RewriteRule ^(.*)$ https://www.examplesite.com/$1 [R=301,L]

Индексные страницы и управление ими

При переходе пользователей на Ваш сайт, например http://hyperhost.ua первоначально откроется так называемый индексирующий файл index.* если он отсутствует, отображается список файлов корневого каталога, либо же  пользователь видит вывод ошибки 403 (FORBIDDEN), если же данная опция неактивна -просмотр директории запрещен.

За отображение вместимого текущего каталога отвечает директива  Indexes (показать  пользователю перечень файлов, если же  в текущем каталоге нет ни одного, стандартного файла index.html или же  его других  аналогов).

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

# Запрет вывода перечня файлов в текущем каталоге

Options -Indexes
В случае, если же все таки необходимо вывести содержимое директории :

#  Разрешение вывода  перечня файлов в текущем каталоге

Options Indexes

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

# Вывод перечня файлов в текущем каталоге за исключением указанного формата

Options Indexes
IndexIgnore *.php* *.pl
Директива выведет список файлов текущего каталога , т.е. его вместимое, исключая с отображении файлы-скриптов PHP и также  Perl.

В случае если веб-сайт работает на основе скриптов , по этому в качестве индексного зачастую может использоваться файл с другим расширением - указать на этот файл можно используя  директиву  DirectoryIndex . К примеру, Вы хотите чтоб при переходе в корневой каталог с браузера открывался не файл  index.html, а к примеру , файл main_file.php:

# Указание индексного файла

DirectoryIndex  main_file.php

Ошибки и их обработка в .htaccess

Во время  работы сайта иногда возникают  разнообразные ошибки, корректней будет их называть не сбоями, а стандартным кодом возврата, которые оговоренные в перечне стандартов HTTP_RFC2616. В RFC , данные коды возврата, имеют название "status codes",мы же, и далее будем называть их ошибками - так более привычно..

Получаемое трехзначное значение кода возврата сервера несет информацию о том, с каким успехом выполнен наш запрос. Любой запрос, в конечном итоге получает свой код возврата от сервера, все коды, которые начинаются на 1ХХ ,2ХХ ,3ХХ являются положительными, значит при выполнении запроса ошибок не возникало и в зависимости от типа и результата запроса будет получен соответствующий код, прочие ( типа 4ХХ, 5ХХ, 6ХХ) принято называть - кодами ошибок..

Можно составить перечень распространенных ошибок :

#400 Bad Request ;
#401 Unauthorized ;
#402 Payment Required ;
#403 Forbidden ;
#404 Not Found ;
#405 Method Not Allowed ;
#406 Not Acceptable ;
#407 Proxy Authentication Required ;
#408 Request Time-out ;
#409 Conflict ;
#410 Gone ;
#411 Length Required ;
#412 Precondition Failed ;
#413 Request Entity Too Large ;
#414 Request-URI Too Large ;
#415 Unsupported Media Type ;
#500 Internal Server Error ;
#501 Not Implemented ;
#502 Bad Gateway ;
#503 Service Unavailable ;
#504 Gateway Time-out ;
#505 HTTP Version not supported.

Во время получения ошибки 4ХХ или 5ХХ пользователь Вашего сайта  увидит в окне браузера текст, который нельзя назвать доступным и понятным обычному пользователю. HTTP-сервер Apache, средствами директив в .htaccess дает возможность предоставить вместо системного неинформативного текста, свою личную страницу, где Вы самостоятельно уже  можете понятно объяснить пользователю в чем состоит проблема, при этом также можно соблюдать дизайнерское решение Вашего сайта.

Пример замены стандартных страниц системных ошибок представлен ниже:

# Установка личных страниц распространенных ошибок


ErrorDocument 404 http://examplesite.com/error/404.htm
ErrorDocument 403 http://examplesite.com/error/403.htm
ErrorDocument 400 http://examplesite.com/error/400.htm
ErrorDocument 500 http://examplesite.com/error/500.htm

 

Управление кодировкой

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

 

  cp866 - Кириллица (DOS).

Windows-1252 - Западная Европа (Windows).

Windows-1251 - Кириллица (Windows).

Windows-1250 - Центральная Европа (Windows).

KOI8-r - Кириллица (КОИ8-Р)

UTF-8 - двух байтовая кодировка

Всего выделяют 6 распространенных кодировок, которые у нас используются :

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

#Установить следующую кодировку для всех страниц выдаваемых веб сервером

AddDefaultCharset WINDOWS-1251

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

# Установить следующую кодировку всем загружаемым файлам на сервер

CharsetSourceEnc WINDOWS-1251

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

# Отключение правил принудительной установки  кодировки

CharsetDisable on

Настройки доступа

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

Для управлением доступом ко всем каталогам и подкаталогам текущей директории используется директива -  Order которая имеет следующий синтаксис:  [Deny,Allow] ( используется по умолчанию) - запрет, разрешение, используется для закрытия доступа всем ip и открытие только конкретным, и  [Allow,Deny] - разрешение, запрет, открытие доступа для всех адресов закрытие конкретным, соответственно. Далее следует раздел описания конкретных уточнений, конкретных адресов, если необходимо использовать все адреса, используется - all.

К примеру нам нужно закрыть доступ для адреса : IP 111.222.333.444, а всем остальным дать зелёный свет, для этого используем следующее::

# Закрытие для конкретного ip адреса доступа к данным расположенным в текущей директории и последующем дереве директорий

Order Allow,Deny
Allow from all
Deny from 111.222.333.444

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

# Закрытие доступа всем, открыть только для определенного ip адреса

Order Deny,Allow
Deny from all
Allow from 111.222.333.444
Данные ограничения можно задавать не только на все файлы текущей директории и включенной в неё, также можно гибко настраивать доступ к отдельным файлам и  директориям или отдельным группам. Например, нужно запретить всем доступ к конкретному файлу, в нашем случае  passwd.html, открыть только одному адресу:

# Открытие доступа к определенному файлу только с конкретного ip

<Files "passwd.html">
 Order Deny,Allow
 Deny from all
 Allow from 111.222.333.444
</Files>
Можно создать правило и таким образом, чтоб, например,  по аналогии запретить доступ  всем адресам и открыть одному, только  для всех файлов с расширением ".php":

# Разрешение доступа к файлом определенного расширения только для конретного ip

<Files "\.(php)$">
 Order Deny,Allow
 Deny from all
 Allow from 111.222.333.444
</Files>

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

Желаем Вам приятной работы и хорошего дня! Если данная статья показалась Вам сложной и нужна помощь в настройке перенаправлений, обращайтесь в техническую поддержку ГиперХост. Мы работаем круглосточно и всегда готовы помочь нашим пользователям.

 


Close Screen
Serhii Petruk
Статей: 29
Оцените статью:


Спасибо за отзыв
Рейтинг: 4.7 из 5 Голосов: 15