Всё про файл .htaccess


Оглавление (нажмите, чтобы открыть):

Настройка веб сервера Apache через Htaccess

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

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

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

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

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

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

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

  • открыть или закрыть доступ к каталогам без индексного файла;
  • запаролить директорию — ограничить доступ по логину — паролю (htpasswd);
  • закрыть внешние ссылки (с других сайтов) на архивы;
  • запретить доступ к файлам определенного формата, или доступ к сайту в определенный промежуток времени;
  • запретить — открыть доступ с определенных (айпи) IP адресов;
  • сменить или добавить еще несколько новых названий индексного файла;
  • включить по мере необходимости проверку в страницах определенного формата — типа на наличии SSI, Perl, PHP и др. включений — директив;
  • сделать редиректы (Redirect) — пересылку пользователя с одних адресов на другие — перенаправления пользователя на другую страницу;
  • скрыть структуру каталогов сайта отображающеюся в адресной сроке браузера, или возможно сделать её более простой и наглядной для конечного пользователя (mod_Rewrite);
  • управлять роботами — ботами поисковых систем на сайте;
  • безболезненно и незаметно перенести сайт на новый домен — смена домена;
  • использовать свои собственные общие страницы ошибок, например, как-то наиболее часто используемые —
    * 401 Authorization Required — Требуется авторизация
    * 403 Forbidden — Доступ запрещен
    * 404 Not Found — Документ не найден
    * 500 Internal Server Error — Ошибка в работе сервера
  • при необходимости сменить кодировку страниц отправляемых веб сервером посетителям;
  • запретить или нужным образом настроить кэширование веб сервера;
  • правильно с минимальными потерями сменить имя домен сайта;
  • обучить веб сервер понимать дополнительные нужные Вам форматы (типы) файлов.

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

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

Надеюсь, что данный ресурс поможет Вам хотя бы частично в решении Ваших задач.

Изучайте синтаксис, основные правила и рекомендации для конфигурационного файла и да «ПРИБУДЕТ» вам «СИЛА» и УДАЧА во всем.

Файл htaccess — настройка и примеры использования

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

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

Что собой представляет файл htaccess и для чего используется

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

Файл htaccess был придуман специально для того, чтобы можно было предоставить возможность менять конфигурацию сервера каждому пользователю, затрагивая только свой собственный сайт, а не весь сервер целиком. Всем известно, что основные директивы конфигурации Apache находятся в файле httpd.conf. Однако у большинства пользователей, а если говорить о виртуальном хостинге, то у всех пользователей, нет возможности получить доступ к нему и прав на модификацию, так как это действие будет распространяться на всех.

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

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

Некоторые особенности использования htaccess:

1. В нем можно переопределить большое количество директив, прописанных в главном файле httpd.confg

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

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

4. Htaccess не доступен пользователю для просмотра из браузера, так как относится к категории «системные».

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

  • Директивы простого перенаправления (редирект);
  • Директивы сложного перенаправления (mod_rewrite);
  • Индексные страницы;
  • Обработка ошибок;
  • Определение кодировки;
  • Управление доступом к директориям и файлам;
  • Паролирование директорий;
  • Опции PHP.

Примеры наиболее частого использования файла htaccess

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

Прежде чем мы приступим обратите внимание на следующие моменты:

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

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

3. Синтаксис .htaccess

— Пути к файлам (директориям) указываются от корня сервера.

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

— Домены записываются с указанием протокола https:// или https://

— Файл имеет название именно «точка» htaccess.

— Для создания закомментированной строчки используйте знак #.

— Редактировать файл удобнее всего при помощи редактора AkelPad, входящего в состав Total Commander, достаточно его выделить и нажать F4.

Простое перенаправление — директива Redirect

1. Осуществление перенаправления на новые страницы сайта

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

2. Приведение фидов к общему формату

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

Сложное перенаправление — директива RewriteRule

1. Перенаправление домена с www на без www.

Очень часто приходится использовать 301 редирект в htaccess для склеивания доменов с www и без www. Раньше поисковые системы считали такие адреса совершенно различными и смотрели на них как на разные сайты. Сегодня задача по склейке возлагается на поискового робота, но никогда не лишним будет указать корректное зеркало. К тому же, у самих не будет никакой путаницы.

2. Перенаправление посетителей на разные старницы в зависимости от IP-адреса посетителя.

В htaccess имеется возможность указать на какую страницу, будет перенаправлен пользователь с конкретным IP-адресом. Например, перенаправление посетителей с ip адресом 183.11.101.1 на страницу kontakt.html

3. Перенаправление в случае обновления веб-ресурса

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

Где 14.124.354.80 — заменить на свой IP адресс.

4. Защита от хотлинков

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

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

5. Перенаправление на безопасное https-соединение

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

6. Автоматическая подстановка слеша в конце адреса.

Очень распространены ситуации, когда URL-адрес, заканчивается именем каталога: https://vash-sait.ru/images/raznoe

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

7. Блокировка пользователей пришедших с определенного сайта

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

Индексные страницы — директива DirectoryIndex

1. Изменение индексной старницы загружаемой по умолчанию

Обычно по умолчанию индексными страницами является index.htm, index.php или index.html, при обращении к директории сайта сразу происходит поиск данных файлов. Но при необходимости можно переопределить индексную страницу на любую другую. Подобная задача также решается с использованием htaccess-файла.

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

Обработка ошибок — директива ErrorDocument

1. Пользовательская страница ошибок

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

2. Создание своих страниц с описанием ошибок

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

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

  • 401 — Требуется авторизация (Authorization Required)
  • 403 — пользователь не прошел аутентификацию, запрет на доступ (Forbided)
  • 404 — запрашиваемый документ (файл, директория) не найден (Not Found)
  • 500 — внутренняя ошибка сервера — ошибка скрипта или ошибка в синтаксисе файла .htaccess — (Internal Server Error)

Определение кодировки

1. Определение кодировки, в которой сервер «отдает» файлы

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

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

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

Управление доступом к директориям и файлам

1. Запретить доступ ко всем файлам

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

2. Разрешить доступ с определенного IP

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

Для этого используются директивы order (далее указывается порядок выполнения директив), deny (директива, с помощью которой запрещается всем и ко всему), allow (директива, за которой следует IP-адрес, попадающий в список исключений и открывающий ему доступ к директивам и файлам). Стоит также отметить, что директивы deny и allow должны следовать именно в этом порядке, иначе действие директивы allow будет перекрыта директивой deny и не даст ожидаемого результата.

3. Запретить доступ с определенного IP

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


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

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

5. Ограничить доступ к определенному типу файлов

6. Запретить просмотр директории без индексных файлов

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

7. Разрешить просматривать директорию

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

1. Заставить работать PHP скрипты в HTML файлах

2. Заставить выполнять PHP в файлах JavaScript

3. Ограничение размера загружаемого файла для PHP

20M — это ращмер файла в мегабайтах

4. Изменить максимальный размер запроса для загрузки в PHP

5. Изменить время исполнения скрипта

30 — время исполнения скрипта в секундах.

6. Изменение времени на разбор введенных данных

Хитрости и примеры использования .htaccess

Оглавление:

Доступ к сайту

Даем доступ ко всему сайту (24.205.23.222) роботу Google без пароля, а всем пользователям с браузерами только по паролю. Также доступна будет валидация XHTML и CSS.

# ELITE HTACCESS FOR WEBDEVELOPERS
##############################################
AuthName «SiteName Administration»
AuthUserFile /home/sitename.com/.htpasswd
AuthType basic
Require valid-user
Order deny,allow
Deny from all
Allow from 24\.205\.23\.222
Allow from w3.org htmlhelp.com
Allow from googlebot.com
Satisfy Any

ПРИМ: Любое правило . htaccess rewrite должно начинаться со следующих строк:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /

Присвоить определенный тип файла (независимо от названия или расширения)

#Makes image.gif, blah.html, index.cgi all act as php
ForceType application/x-httpd-php

Дружественные SEO перенаправления для удаленных/перемещенных ссылок и страниц.

Для единичного файла

Redirect 301 /d/file.html https://www.htaccesselite.com/r/file.html

Для нескольких файлов например: blog/this.php?gh

RedirectMatch 301 /blog(.*) https://www.askapache.com/$1

Переадресация на другой домен

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

Обязательное использование префикса: www

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond % !^/robots\.txt$
RewriteCond % !^www\.example\.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

Обязательное использование префикса: www (без обработки скриптами)

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond % !^/robots\.txt$ [NC]
RewriteCond % !^www\.[a-z-]+\.[a-z] [NC]
RewriteCond % ([a-z-]+\.[a-z] )$ [NC]
RewriteRule ^/(.*)$ https://%1/$1 [R=301,L]

Требовать не субдомен

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond % !^/robots\.txt$
RewriteCond % \.([a-z-]+\.[a-z] )$ [NC]
RewriteRule ^/(.*)$ https://%1/$1 [R=301,L]

Перенаправление запросов с любых IP за исключением одного (полезно для веб-разработки)

ErrorDocument 403 https://www.someothersite.com
Order deny,allow
Deny from all
Allow from 24.33.65.6

Установка временной зоны сервера:

SetEnv TZ America/Indianapolis

Установка е-mail администратора:

SetEnv SERVER_ADMIN webmaste@htaccesselite.com

Добавление языкового тега “en-US” (или “ru-RU”) и заголовка”text/html; UTF-8″ без использования метатегов

AddDefaultCharset UTF-8
# Or AddType ‘text/html; charset=UTF-8’ html
DefaultLanguage en-US

Используя “Files Directive”

AddDefaultCharset UTF-8
DefaultLanguage en-US

Используя “FilesMatch Directive” (предпочтительнее)

AddDefaultCharset UTF-8
DefaultLanguage en-US

Использование собственного php.ini с mod_php или php как cgi

AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi
Options -ExecCGI

Все перечисленные файлы (расширения) попадают на обработчик -ExecCGI, и автоматически выключают -FollowSymLinks (и как обратный пример, +ExecCGI также включает +FollowSymLinks)

Разрешить только GET и PUT методы запросов на сервере.

Options -ExecCGI -Indexes -All +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond % !^(GET|PUT)
RewriteRule .* — [F]

Пропустить все файлы gif через cgi скрипт (обработать)

Action image/gif /cgi-bin/filter.cgi

Обработать запрос в зависимости от метода запроса

Script PUT /cgi-bin/upload.cgi

Добавить типы файлов не отображающихся в браузере

AddType application/octet-stream .avi
AddType application/octet-stream .mpg

И тогда Ваша HTML ссылка будет выглядить так:

Клиент получит всплывающее окно с запросом Открыть или Сохранить файл.

Разрешить показывать код в браузере

Например Вы хотите чтобы сервер не обрабатывал файлы типа .pl, .py, или .cgi, а отображал их в браузере как текстовый файл.

RemoveHandler cgi-script .pl .py .cgi

Ускорение работы сайта при помощи кэширования

# MONTH

Header set Cache-Control «max-age=2592000»

# WEEK

Header set Cache-Control «max-age=604800»

# DAY

Header set Cache-Control «max-age=43200»

Защитить контент (картинки, файлы и т.п.) от кражи

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond % !^$
RewriteCond % !^https://(www\.)?askapache.com/.*$ [NC]
RewriteRule \.(gif|jpg|swf|flv|png)$ https://www.askapache.com/feed.gif [R=302,L]

Обработка ошибок HTTP

ErrorDocument 404 /favicon.ico
ErrorDocument 403 https://secure.htaccesselite.com
ErrorDocument 404 /cgi-bin/error.php
ErrorDocument 400 /cgi-bin/error.php
ErrorDocument 401 /cgi-bin/error.php
ErrorDocument 403 /cgi-bin/error.php
ErrorDocument 405 /cgi-bin/error.php
ErrorDocument 406 /cgi-bin/error.php
ErrorDocument 409 /cgi-bin/error.php
ErrorDocument 413 /cgi-bin/error.php
ErrorDocument 414 /cgi-bin/error.php
ErrorDocument 500 /cgi-bin/error.php
ErrorDocument 501 /cgi-bin/error.php

Идентификация пользователей

Защита паролем 1-го файла:

AuthName «Prompt»
AuthType Basic
AuthUserFile /home/askapache.com/.htpasswd
Require valid-user

Защита нескольких файлов:

AuthName «Development»
AuthUserFile /.htpasswd
AuthType basic
Require valid-user

Пример использования разрешающей директивы – Allow Directive:

# A (partial) domain-name
Allow from 10.1.0.0/255.255.0.0

# Full IP address
Allow from 10.1.2.3

# More than 1 full IP address
Allow from 192.168.1.104 192.168.1.205

# Partial IP addresses
# first 1 to 3 bytes of IP, for subnet restriction.
Allow from 10.1
Allow from 10 172.20 192.168.2

# network/netmask pair
Allow from 10.1.0.0/255.255.0.0

# network/nnn CIDR specification
Allow from 10.1.0.0/16

# IPv6 addresses and subnets
Allow from 2001:db8::a00:20ff:fea7:ccea
Allow from 2001:db8::a00:20ff:fea7:ccea/10

Использование посетителем зависимых переменных окружения:

SetEnvIf User-Agent ^KnockKnock/2\.0 let_me_in
Order Deny,Allow
Deny from all
Allow from env=let_me_in

Разрешить вход на apache.org и запретить на foo.apache.org

Order Allow,Deny
Allow from apache.org
Deny from foo.apache.org


Разрешить с определенного IP вход без запроса пароля, а с других IP требовать пароль:

AuthUserFile /home/www/site1-passwd
AuthType Basic
AuthName MySite
Require valid-user
Allow from 172.17.10
Satisfy Any

Блокировать доступ к файлам в определенное время суток

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
# If the hour is 16 (4 PM) Then deny all access
RewriteCond % ^16$
RewriteRule ^.*$ — [F,L]

Базовый шаблон .htaccess

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

# DEFAULT SETTINGS
##############################################
Options +ExecCGI -Indexes
DirectoryIndex index.php index.html index.htm

### DEFAULTS ###
ServerSignature Off
AddType video/x-flv .flv
AddType application/x-shockwave-flash .swf
AddType image/x-icon .ico
AddDefaultCharset UTF-8
DefaultLanguage en-US
SetEnv TZ America/Indianapolis
SetEnv SERVER_ADMIN webmaster@askapache.com

### FAST-CGI ###
AddHandler fastcgi-script fcgi
AddHandler php-cgi .php
Action php-cgi /cgi-bin/php5-wrapper.fcgi

# HEADERS and CACHING
##############################################
#### CACHING ####
# YEAR

Header set Cache-Control «max-age=2592000»

# WEEK

Header set Cache-Control «max-age=604800»

# 10 minutes

Header set Cache-Control «max-age=600»

# DONT CACHE

Header unset Cache-Control

# REWRITES AND REDIRECTS
##############################################
### SEO REDIRECTS ###
Redirect 301 /2006/uncategorized/htaccesselitecom-aboutus.html https://www.^^SITE^^.^^TLD^^

### REWRITES ###
RewriteEngine On
RewriteBase /

Как написать .htaccess файл для сайта

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

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

Делается это разрешение при помощи следующего блока кода:

Здесь в теге указывается физический путь на сервере до корня вашего сайта, и внутри тега указывается директива AllowOverride. Эта директива может быть установлена в None, чтобы сервер не читал файл .htaccess. Если она установлена в All — сервер будет допускать все директивы .htaccess файла. Значение по умолчанию: AllowOverride All.

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

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

Для чего мы можем использовать .htaccess файл. Вариантов здесь немало, вот самые распространенные из них:
1.Для управления разрешениями на доступы к каталогам сайта (запаролить директорию, запретить доступ к файлам определенного формата, или доступ к сайту в определенный промежуток времени, запретить или открыть доступ с определенных IP адресов, управлять роботами поисковиков)
2.Для перезаписи текущего URL на новый в зависимости от условий (см. также описание mod_rewrite сервера Apache и логику его обработки правил )
3.Для явного указания кодировки сайта.
4.Для разрешения или запрета просмотра файлов сайта
5.Для защиты от хотлинка
6.Для выполнения ридирктов
7.Для задания своих страниц ошибок
8.Для переопределения индексного файла
9…. и многое другое.

Давайте для примера напишем некий обобщенный файл .htaccess.
В него мы соберем наиболее распространенные случаи использования директив и добавим к ним комментарии. И из этого шаблона путем удаления не нужного вы сможете всегда подготовить конкретный .htaccess для ваших задач. Здесь символ # — это символ комментария применяемый в конфигах apache.

Расшифрую некоторые флаги из директив:

  • RewriteCond . [NC] — NC значит регистр нечувствительное сравнение выполнять
  • RewriteCond . [NC,OR] — NC см. выше, OR — значит объединять RewriteCond через OR, по умолчанию если ничего не указана то RewriteCond объединяются через AND оператор.
  • RewriteRule . [L] — L значит закончить (остановить обработку) на этом RewriteRule правиле любые дальнейшие преобразования URL, т.е. последующие RewriteRule не выполнять.
  • RewriteRule . [L,R=302] — L см. выше, R=302 значит выполнить редирект с кодом 302 на преобразованный URL
  • RewriteRule . [R=301,QSA,L] — L и R см. выше, QSA — при преобразовании URL выполнять при стыковку заданных частей, а не замену.
  • RewriteRule . [F] — F, значит отказать в выдачи результата по этому URL кодом 403 Forbidden .
  • RewriteRule . — [G,L] G|Gone — [G] flag значит отдать код 410Gone status — рекомендация забыть этот URL

AuthUserFile — задает путь к файлу с паролями для http авторизации пользователя. Путь может быть абсолютный от корня файловой системы Linux сервера или относительный от ServerRoot apache. В Ubuntu ServerRoot «/etc/apache2» по умолчанию. При задании относительного пути от ServerRoot apache начальный слеш в пути не указывается, иначе путь будет восприниматься как абсолютный от корня Linux. Также, если путь содержит недопустимые символы и пробелы его нужно заключать в кавычки, это общее правило.

Order, Deny, Allow

Теперь еще раз, но уже более детально, хотелось бы вернуться к директивам управление доступом: Order, Deny, Allow и более детально описать ее синтаксис и логику.

Директива Order синтаксис: Order [Deny,Allow] или [Allow,Deny]

По умолчанию директива Order имеет порядок: Deny,Allow. Обратите внимание, что Deny,Allow пишутся без пробела.

В зависимости от того в каком порядке указаны директивы Deny,Allow или Allow,Deny меняется логика работы.

Если Deny,Allow то запрещается доступ со всех IP кроме указанных, если Allow,Deny разрешается доступ со всех IP кроме оговоренных. Далее идут секции описания для доступа и запрета. Ключевое слово all означает со всех IP.

Например, что бы запретить (блокировать) доступ с IP x.x.x.x и x.x.x.xx и разрешить доступ всем остальным необходимо добавить в .htaccess следующий код:

# Разрешить ВСЕМ кроме указанных IP
Order Allow,Deny
Allow from all
Deny from x.x.x.x x.x.x.xx

Обратите внимание что IP записаны через пробел. Можно также указать IP как IP/маска.

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

# Запретить ВСЕМ кроме указанных IP
Order Deny,Allow
Deny from all
Allow from x.x.x.x x.x.x.xx

Запрет или разрешение можно указывать и на отдельный файл или группы файлов. Например, что бы запретить доступ всех кроме IP x.x.x.x к файлу passwd.html, который расположен в текущей директории.

# Запретить файл passwd.html ВСЕМ кроме указанных IP

Order Deny,Allow
Deny from all
Allow from x.x.x.x

Аналогично можно запретить или разрешить доступ к определенной группе файлов описав их через регулярное выражение. Например, к файлам с расширением «.key»:

# Запретить файлы *.key ВСЕМ кроме указанных IP

Order Deny,Allow
Deny from all
Allow from x.x.x.x

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

Всё про файл .htaccess

Htaccess (HyperText Access) представляет собой простой файл конфигурации, который позволяет дизайнерам, разработчикам и программистам, изменять конфигурацию веб-сервера Apache, чтобы реализовать дополнительную функциональность. Такая функциональность может включать в себя перенаправления пользователей, изменение URL, обеспечение защиты паролем директорий и многое другое

Создание и загрузка файла .htaccess

Создать файл .htaccess очень просто.

Откройте Блокнот или аналогичный текстовый редактор, добавьте код и сохраните файл как обычно вы это делаете.

Например, вы можете назвать его:

Затем загрузите файл в соответствующий каталог на вашем веб-сервере и переименуйте его:

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

Использование .htaccess

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

Однако, если вы поместите файл .htaccess в директорию https://www.yourdomain.com/directory1, то функциональность .htaccess будет ограничена этой папкой и всеми вложенныеми в неё папками. Например:

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

Полезные сниппеты

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

Directory Index

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

Пользовательские страницы ошибок

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

Вы можете для каждого типа ошибки сделать свою страницу:

Только не забудьте предварительно создать страницы ошибок!

Удаляем WWW из адреса сайта

Чтобы удалить «WWW» из адреса вашего сайта, используйте следующий код:

Установка часового пояса для сервера

Управление доступом к файлам

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

Однако, если вы хотите запретить доступ конкретному IP-адресу, то вы можете использовать этот код:

или для нескольких IP-адресов, вы можете написать так:

301 Permanent Redirects

Вы изменили адреса страниц, но не хотите терять посетителей? Тогда попробуйте:

Установить адрес электронной почты администратора сервера

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

Определение типа устройства и перенаправление

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

Защита от хотлинкинга

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

Вызываем окно «Файл Сохранить как»

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

или упростить это так:

Rewrite URL

Если вы хотите, чтобы ваши ссылки было немного легче читать (т.е. изменить content.php? >

Перенаправление браузера на HTTPS

Это всегда полезно для тех, кто только что установил SSL-сертификат:

Включаем SSI

Если вы хотите активировать SSI для HTML и SHTML-файлов, то попробуйте:

Включение и отключение просмотра каталогов

Изменение кодировки и языка заголовков

Для тех, кто хочет изменить текущую кодировку и язык:

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

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


Блокировка нежелательных ботов

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

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

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

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

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

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

Файл htaccess: применение, включение, настройка

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

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

Из этой статьи вы узнаете:

  1. Что такое файл .htaccess
  2. Для чего он нужен и как его настроить
  3. Как включить файл htaccess и проверить его работу
  4. Как настроить файл htaccess для wordpress
  5. Какая может возникнуть ошибка
  6. Где можно скачать правильный файл .htaccess

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

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

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

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

Рекомендуемые статьи по данной теме:

Теперь перечислим тонкости работы с htaccess:

  1. Он позволяет переопределить многие директивы, хранящиеся в файле httpd.confg.
  2. Файл .htaccess, при помещении в корневой каталог, воздействует на весь сайт. Однако исключением для файла .htaccess из этого правила являются каталоги, имеющие отдельный конфигурационный файл, и те, что оказались ниже в древовидной структуре.
  3. Данный файл помещается в любой каталог, причем все подкаталоги будут подчиняться его директивам.
  4. Пользователь лишен возможности просматривать из браузера .htaccess, поскольку последний входит в категорию системных файлов.

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

  • директивы простого перенаправления (редирект);
  • директивы сложного перенаправления (mod_rewrite);
  • индексные страницы;
  • обработка ошибок;
  • определение кодировки;
  • управление доступом к директориям, файлам;
  • паролирование директорий;
  • опции PHP.

Для чего нужен и как настроить файл .htaccess

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

Редирект между страницами или сайтами

Помните, чтобы редирект мог работать, перед строками, о которых мы еще скажем, прописывают:

  • 301 Редирект с одной страницы на другую (либо сайт).

При работе с расширением .htaccess для редиректа в файл нужно внести такие строки:

  • 301 Редирект с www-сайта на сайт без www.

Допустим, речь идет о перенаправлении с https://www.site.com на https://site.com. Отметим, что это очень полезный ход, и он нередко применяется в СЕО. Для этого есть код:

Обратный редирект с домена без www на домен с www

  • Перенаправление с https://site.com на https://www.site.com.

Эта операция также в принципе возможна, но мы не рекомендуем ее применять. В этом случае:

RewriteCond % ^domain\.com$ [NC]

  • Перенаправление людей с прежнего сайта на новый.
  • Добавление .html в конце URL.

В файле .htaccess это делается для html сайта, чтобы при вводе site.com/page либо site.com/page/ пользователь перенаправлялся на site.com/page.html. Для этого прописываем в .htaccess:

RewriteRule .* %1.html [R=301,L]

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

  • Удаление .html в конце URL.

Чтобы осуществить обратное перенаправление с site.com/page.html на site.com/page:

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

  • Удаление значка слэш в конце URL.

Допустим, изначально адрес выглядел как site.com/page/, а теперь он представлен таким образом: site.com/page, тогда нам нужно:

RewriteRule ^(.+)/$ /$1 [R=301,L]

  • 301 Редирект с одного раздела на другой.

Нам необходимо, чтобы со всех страниц определенного раздела site.com/razdel-1/razdel-2/page посетитель сайта попадал на страницы другого раздела site.com/razdel-1/page, прописываем:

  • 301 Редирект при переезде на новый домен.

Здесь нужно корректно перенаправлять гостей с каждой страницы старого сайта на ту страницу нового, которая ее замещает. В качестве примера возьмем oldsite.com/page и newsite.com/page. Тогда в файле .htaccess для сайта прописывается:

RewriteCond % ^test.oldsite.com$ [NC]

Правильное изменение страниц ошибок в .htaccess

Итак, пользователь самостоятельно задает адрес, либо кликает на ссылку. Таким образом, он отправляет соответствующий запрос на сервер хостера. И получает ответ с кодом. При бесперебойной работе придут коды 1-399, а при ошибке цифры будут такими: 400-599. Представим простую ситуацию: сервер вашего сайта перегружен, либо происходит перезагрузка. На мониторе, если человек пытается зайти на сайт, отобразится, например, 500 Internal Server Error. Рядовому пользователю эти слова не понятны, он резонно решит, что сайт уже устарел и закрыт. Эффект от этого один – человек к вам уже не вернется.

Из этого есть выход. Стандартную страницу ошибки (пугающую людей) замените на вашу отдельную страницу. Там будет содержаться информация: сайт не действует на данный момент, но вскоре продолжит работать, и на него стоит заглянуть еще раз. Интересный пример – сайт КиноПоиск. При перегрузке серверов, в соответствии с тематикой, здесь отображается сообщение «Матрица перезагружается. » и изображение из культового фильма.

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

Здесь можно уведомить гостя, что он пытался воспользоваться несуществующей ссылкой. Хорошим ходом будет предложение не закрывать вкладку, а поискать сведения на этом сайте. Теперь перейдем к главному: чтобы заменить страницу ошибки своей, создайте отдельную страницу (допустим https://yoursite.com/404.html), снабдите файл .htaccess необходимым кодом. Это его варианты:

Уточним нюанс: чтобы заменить страницу ошибки 403, нужно прописать сообщение:

ErrorDocument 403 «Sorry can’t allow you access today, see you later alligator :)»

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

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

  • Защита сайта от скриптовых инъекций.

Волшебный файл .htaccess

Apache — самый распространённый HTTP-сервер. Распространяется бесплатно, включая исходные тексты. Поддерживаются сценарии на CGI (включая FastCGI), PHP, Perl, Java. Аутентификация — базовая, message-digest, TLS (SSL). С апреля 1996 это самый популярный HTTP-сервер в Интернете, в августе 2007 года он работал на 51% всех веб-серверов.

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

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

Файл .htaccess может быть размещен в любом каталоге сайта. Директивы этого файла действуют на все файлы в текущем каталоге и во всех его подкаталогах (если эти директивы не переопределены директивами нижележащих файлов .htaccess).


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

Список всех доступных директив можно посмотреть тут.

Директивы простого перенаправления (редирект)

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

Более сложный пример — мы хотим определенные страницы нашего сайта переадресовывать на другие сайты:

Теперь при обращении к https://mysite.ru/linux будет открываться https://www.linux.org , а при обращении к https://mysite.ru/linux/download.html будет https://www.linux.org/dist/download_info.html . В последнем примере WEB-сервер будет передавать код 301, что означает «документ перемещен постоянно».

Синтаксис команды Redirect выглядит следующим образом:

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

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

  • Круглые скобки () используются для выделения групп символов. В дальнейшем к ним можно обращаться по номеру.
  • Символ ^ обозначает начало строки.
  • Символ $ обозначает конец строки.
  • Символ . обозначает любой символ.
  • Символ | обозначает альтернативу. Например, выражения «A|B» означают «A или B».
  • Символ ? ставится после символа (группы), который может как присутствовать, так и отсутствовать.
  • Символ * ставится после символа (группы), который может отсутствовать или присутствовать неограниченное число раз подряд.
  • Символ + действует аналогично символу * с той лишь разницей, что предшествующий ему символ обязательно должен присутствовать хотя бы один раз.
  • Квадратные скобки [] используются для перечисления допустимых символов.
  • Квадратные скобки [^] используются для перечисления недоступных символов.
  • Символ \ ставится перед спецсимволами, если они нужны в своем первозданном виде.
  • Все, что расположено после символа ‘#’, считается комментарием.

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

Директивы сложного перенаправления (mod_rewrite)

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

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

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

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

(0 Вы можете предварять строку шаблона префиксом ‘!’ для указания несоответствия шаблону.

  • ‘>Условие’ (лексически больше)
  • ‘=Условие’ (лексически равно)
  • ‘-d’ (является ли каталогом)
  • ‘-f’ (является ли обычным файлом)
  • ‘-s’ (является ли обычным файлом с ненулевым размером)
  • ‘-l’ (является ли символической ссылкой)
  • ‘-F’ (проверка существования файла через подзапрос)
  • ‘-U’ (проверка существования URL через подзапрос)

    Все эти проверки также могут быть предварены префиксом восклицательный знак (‘!’) для инвертирования их значения.

    RewriteEngine включает или выключает работу механизма преобразования. Если она установлена в положение off, этот модуль совсем не работает. Заметьте, что по умолчанию настройки преобразований не наследуются. Это означает, что вы должны иметь RewriteEngine on директиву для каждого виртуального хоста, в котором вы хотите использовать этот модуль.
    Синтаксис RewriteEngine выглядит следующим образом:

    Используйте для комбинирования условий в правилах OR вместо AND. Типичный пример — перенаправление запросов на поддомены в отдельные каталоги.

    Для выдачи главной страницы какого-либо сайта, согласно «User-Agent:» заголовку запроса, Вы можете использовать следующие директивы:

    Для выдачи разных сайтов для разных браузеров, согласно «User-Agent:» заголовку запроса, Вы можете использовать следующие директивы:

    Общий синтаксис директивы RewriteRule выглядит следующим образом:

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

    ‘redirect|R [=code]’
    (вызывает редирект)
    Префикс в Подстановке вида https://thishost[:thisport]/ (создающий новый URL из какого-либо URI) запускает внешний редирект (перенаправление). Если нет никакого кода, в подстановке ответ будет со HTTP статусом 302 (ВРЕМЕННО ПЕРЕМЕЩЕН). Для остановки процесса преобразования вам также нужно написать флаг ‘L’.

    ‘forb >
    (делает URL запрещенным)
    Это делает текущий URL запрещённым, например, клиенту немедленно отправляется ответ с HTTP статусом 403 (ЗАПРЕЩЕНО). Используйте этот флаг в сочетании с соответствующими RewriteConds для блокирования URL по некоторым критериям.

    ‘gone|G [=code]’
    (делает URL «мёртвым»)
    Этот флаг делает текущий URL «мертвым», т.е., немедленно отправляется HTTP ответ со статусом 410 (GONE). Используйте этот флаг для маркировки «мертвыми» несуществующие более страницы.

    ‘proxy|P [=code]’
    (вызвает прокси)
    Этот флаг помечает подстановочную часть как внутренний запрос прокси и немедленно (т.е. процесс преобразования здесь останавливается) пропускает его через прокси-модуль. Используйте этот флаг для того, чтобы добиться более мощной реализации директивы ProxyPass, интегрирующей некоторое содержимое на удаленных серверах в пространство имён локального сервера.

    ‘last|L [=code]’
    (последнее правило)
    Остановить процесс преобразования на этом месте и не применять больше никаких правил преобразований. Используйте этот флаг для того, чтобы не преобразовывать текущий URL другими, следующими за этим, правилами преобразований.

    ‘next|N [=code]’
    (следуюший раунд)
    Перезапустить процесс преобразований (начав с первого правила). В этом случае URL снова сопоставляется неким условиям, но не оригинальный URL, а URL вышедший из последнего правила преобразования. Используйте этот флаг для перезапуска процесса преобразований, т.е. безусловному переходу на начало цикла.

    ‘chain|C [=code]’
    (связь со следующим правилом)
    Этот флаг связывает текущее правило со следующим (которое, в свою очередь, может быть связано со следующим за ним, и т.д.). Это имеет следующий эффект: если есть соответствие правилу, процесс продолжается как обычно, т.е. флаг не производит никакого эффекта. Если правило не соответствует условию, все следующие, связанные правила, пропускаются.

    ‘type|T=MIME-тип [=code]’
    (принудительно установить MIME тип)
    Принудительно установить MIME-тип целевого файла в MIME-тип. К примеру, это можно использовать для имитации mod_alias директивы ScriptAlias, которая принудительно устанавливает для всех файлов внутри отображаемого каталога MIME тип равный «application/x-httpd-cgi».

    ‘nosubreq|NS [=code]’
    (используется только в случае не внутреннего подзапроса)
    Этот флаг дает команду механизму преобразований пропустить директиву, если текущий подзапрос является внутренним подзапросом. К примеру, внутренние подзапросы в Apache происходят тогда, когда mod_include пытается получить информацию о возможных файлах по умолчанию для каталогов (index.xxx). При подзапросах это не всегда полезно и даже иногда вызывает проблему в работе набора директив преобразований. Используйте этот флаг для исключения некоторых правил.

    ‘nocase|NC [=code]’
    (не учитывать регистр)
    Это делает Шаблон нечувствительным к регистру, т.е. нет различий между ‘A-Z’ и ‘a-z’, когда Шаблон применяется к текущему URL.

    ‘qsappend|QSA [=code]’
    (добавлять строку запроса)
    Этот флаг указывает механизму преобразований на добавление, а не замену, строки запроса из URL к существующей, в строке подстановки. Используйте это когда вы хотите добавлять дополнительные данные в строку запроса с помощью директив преобразований.

    ‘noescape|NE [=code]’
    (не экранировать URI при выводе)

    Этот флаг не даёт mod_rewrite применять обычные правила экранирования URI к результату преобразования. Обычно, специальные символы (такие как ‘%’, ‘$’, ‘;’, и так далее) будут экранированы их шестнадцатиричными подстановками (‘%25’, ‘%24’, и ‘%3B’, соответственно); этот флаг не дает это делать.

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

    При наличии в файле .htaccess каких-либо директив модуля mod_rewrite не наследуется ничего, а состояние по умолчанию выставляется таким же, как в главном конфигурационном файле веб-сервера (по умолчанию «off»). Поэтому, если нужны правила преобразования для конкретного каталога, то нужно еще раз вставить директиву «RewriteEngine on» в .htaccess для конкретного каталога.

    При наследовании правил из верхних каталогов и добавлении к ним новых свойственных только данному каталогу — необходимо выставить в начале следующее: «RewriteEngine on» и «RewriteOptions inherit» — последняя директива сообщает серверу о продолжении.

    Примеры использования mod_rewrite можно посмотреть тут

    Индексные страницы

    Когда пользователь заходит на хост, например, https://gentoo.org, принято, что открывается индексный файл index.* , а при его отсутствии отображается либо содержимое каталога, либо отдается ошибка 403 FORBIDDEN (если отключена опция «просмотр директорий»).

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

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

    А чтобы выдавал листинг, нужно:

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

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

    Если же вы хотите что бы при обращении к каталогу открывался не index.html, а, например, файл htaccess.php или /cgi-bin/index.pl:

    Обработка ошибок

    В ходе работы сервера иногда возникают ошибки, однако правильнее называть их не сбоями в работе сервера, а стандартными кодами возврата, оговоренными в стандарте HTTP_RFC2616. Вообще, в RFC ошибки называются «Status Codes«, но мы их будем называть именно ошибками — так привычнее.

    Код возврата — это трехзначное число, на основании которого можно судить о том, насколько успешно был обработан запрос. Код возврата начинающиеся на 1,2,3 считаются успешными, остальные причисляются к разряду ошибок.

    При возникновении ошибки 4xx или 5xx посетитель Вашего сайта увидит в браузере сообщение от сервера, которое вряд ли можно назвать предельно понятным рядовому пользователю. Apache предоставляет возможность выдать вместо аскетичного технического текста, не изобилиющего деталями, свою страницу, где Вы можете человеческим языком объяснить пользователю, что произошло и что делать.

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

    Более подробно об обработке ошибок можно прочитать в документации по Apache на странице «Custom error responses».

    Кодировка

    Иногда браузер пользователя не может корректно определить тип кодировки выдаваемого документа. Для решения этой проблемы используемая кодировка указывается в настройках Web-сервера Apache и заголовке передаваемого документа. Причем для корректного распознания эти кодировки должны совпадать. На наших серверах по умолчанию используется кодировка UTF-8.

    В HTML для указания кодировки используется тег:

    Наиболее часто встречаются типы кодировки для русского языка передаваемые в заголовке документа:

  • Windows-1251 — Кириллица (Windows).
  • KOI8-r — Кириллица (КОИ8-Р)
  • cp866 — Кириллица (DOS).
  • Windows-1252 — Западная Европа (Windows).
  • Windows-1250 — Центральная Европа (Windows).
  • UTF-8 — двух байтовая кодировка
  • Теперь рассмотрим указание кодировки по умолчанию через .htaccess. AddDefaultCharset задает дефолтную таблицу символов (кодировку) для всех выдаваемых страниц на веб-сервере Apache. Указываем кодировку на все файлы, в которой по умолчанию получает документы браузер:

    При загрузке файла на сервер возможна перекодировка. Указываем, что все получаемые файлы будут иметь кодировку windows-1251, для этого напишем:

    Если необходимо отменить перекодировку сервером файлов:

    Управление доступом

    Очень часто возникает необходимость запретить доступ к определенным файлам или папкам для определенных групп пользователей. В Web-сервере Apache есть встроенные средства для решения данной проблемы.

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

    В зависимости от того, в каком порядке указаны директивы, меняется логика работы сервера. В случае, если Deny,Allow, то запрещается доступ со всех IP кроме оговоренных, в случае, если Allow,Deny, разрешается доступ со всех IP кроме оговоренных. Далее должны идти секции описания для доступа и запрета. Ключевое слово all означает со всех IP

    Например, мы хотим запретить (блокировать) доступ с IP 81.222.144.12 и 81.222.144.20 и разрешить всем остальным. Нам необходимо добавить в .htaccess следующий код:

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

    Запрет или разрешение на доступ можно указывать не только на все файлы, но так же можно указывать на отдельный файл или группы файлов. Например, мы хотим запретить доступ всех пользователей, кроме IP 81.222.144.12, к файлу passwd.html, который расположен в текущей директории:

    Так же можно запретить или разрешить доступ к определенной группе файлов. Например, к файлам с расширением «.key«:

    Паролирование директорий

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

    Данный файл нужно положить в ту директорию, на которую мы хотим поставить пароль.

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


    Директива AuthType выбирает тип аутентификации. Возможны следующие типы: Basic или Digest. Второй может не поддерживаться некоторыми браузерами, поэтому пользоваться им не рекомендуется.

    AuthUserFile указывает имя файла с паролями для аутентификации пользователей (пароли в этом файле будут шифрованными). Путь к файлу с паролями задается относительно корня веб-сервера. Храните файл с паролями в папке, доступ к которой закрыт для пользователей. Желательно поместить этот файл вне иерархии вашего веб-сайта, например, рядом с каталогом public_html. Размещать его выше каталога сайта нецелесообразно. Это не увеличит безопасность, но потребует дополнительной настройки прав доступа в связи с изоляцией сайтов.

    Если у Вас установлена операционная система семейства Windows, Вы можете подключится к серверу по SSH (инструкцию по подключению можно найти тут) и воспользоваться утилитой htpasswd.

    Запустив htpasswd без параметров мы увидим:

    beget@ginger

    # htpasswd
    Usage:
    htpasswd [-cmdps] passwordfile username
    htpasswd -b[cmdps] passwordfile username password
    -c Create a new file.
    beget@ginger

    Здесь не будут рассматриваться все параметры этой команды, но вы можете сами прочитать подробности, запустив htpasswd в unix shell, или ознакомившись с соответствующей страницей документации по Apache.

    Итак, изначально у нас еще нет файла с паролями и нам нужно его создать:

    beget@ginger

    # htpasswd -c authfile test1
    New password:
    Re-type new password
    Adding password for user test1
    beget@ginger

    После выполнения данной операции htpasswd создаст файл passwords, в котором окажется пользователь test1 и его пароль в зашифрованном виде:

    А теперь мы хотим добавить еще одного пользователя. Так как файл с паролями у нас уже есть, мы просто не будем использовать ключ ‘-c’ :

    beget@ginger

    # htpasswd .authfile test2
    New password:
    Re-type new password:
    Adding password for user test2

    $ cat .authfile
    test1:zgco1KREjBY8M
    test2:eN3uA6t0kzV1c
    beget@ginger

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

    Указывая valid-user, Вы разрешаете доступ всем пользователям, перечисленным в файле паролей.

    Приведем пример для доступа определенных пользователей из файла с паролями .htpasswd

    Также, как и с запретом доступа по IP, здесь можно использовать расширение . Ниже приведены два примера: установки пароля на один определенный файл и на группу файлов.

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

    Указание опций PHP

    Директивы для конфигурирования PHP можно размещать не только в файле php.ini, но также и в конфигурационных файлах Apache для вашего сайта – .htaccess. Это позволяет проводить тонкую настройку php для разных директорий.

    Для работы с PHP в конфигурационных файлах Apache доступны 4 директивы: php_value, php_flag, php_admin_value, php_admin_flag, которые отличаются значимостью, типом устанавливаемых значений и местом применения.

    Директивы php_admin_value, php_admin_flag выставляются только в файле httpd.conf, так что нам они не интересны. По сути, данные директивы переопределяют значение остальных директив.

    Директива php_flag служит для установки логических значений директив в php.ini, в то время как директива php_value служит для установки строковых и числовых значений директив php.ini, т.е. любых типов значений, за исключением логических.

    Синтаксис директив очень прост:

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

    mysql.default_host

    Устанавливает имя хоста базы данных.
    Пример: php_value mysql.default_host localhost

    mysql.default_user

    Устанавливает имя пользователя базы данных
    Пример: php_value mysql.default_user alexey

    mysql.default_password

    Устанавливает пароль пользователя базы данных
    Пример: php_value mysql.default_password Hry5Gw2

    display_errors

    Разрешает вывод ошибок и предупреждений в браузер.
    Пример: php_flag display_errors 0

    display_startup_errors

    Включает отображение ошибок, возникающих при запуске PHP.
    Пример: php_flag display_startup_errors 0

    error_reporting

    Определяет типы (уровни важности) фиксируемых ошибок.
    Пример: php_value error_reporting 32767

    auto_prepend_file

    Определение файла, который будет выводится в начале каждого php-скрипта. Путь указывается от корня файловой системы сервера.
    Пример: php_value auto_prepend_file /www/server/prepend.php

    auto_append_file

    Определение файла, который будет выводится в конце каждого php-скрипта.
    Пример: php_value auto_append_file /www/server/append.php

    sendmail_from

    Устанавливает e-mail отправителя, который применяется при отправке почтовых сообщений с помощью PHP.
    Пример: php_value sendmail_from root@beget.com

    user_agent

    Устанавливает строку User-agent, которая используется PHP при обращении к удаленным серверам.
    Пример: php_value user_agent “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)”

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

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

    Удачной работы! Если возникнут вопросы — напишите нам, пожалуйста, тикет из Панели управления аккаунта, раздел «Помощь и поддержка«.

    Настройка файла htaccess

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

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

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

    Синтаксис файла htaccess

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

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

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

    Команда параметр1 параметр2 флаги

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

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

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

    • order — порядок;
    • deny — запретить;
    • allow — разрешить.

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

    Затем с помощью директивы allow или deny мы разрешаем или запрещаем доступ к папке с определенных адресов. Например, чтобы запретить все необходимо добавить в htaccess:

    Order deny,allow
    Deny from all

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

    Order deny,allow
    Deny from all
    Allow 192.168.0.

    Если указано deny,allow, то проверка будет выполняться в таком порядке. Сначала все директивы deny, затем все директивы allow, и если ни одно из условий не подошло, то запрос пропускается.При allow,deny такой запрос будет по умолчанию отклонен. Например, предыдущий пример можно написать так:

    Order allow,deny
    Allow 192.168.0.

    Модификация URL в htaccess

    Наиболее часто htaccess используется для модификации URL во время выполнения или редиректов. За эту функциональность отвечает модуль mod_rewrite и обычно он активирован в большинстве конфигураций Apache.

    Модификация URL в htacces выполняется с помощью трех директив, это RewriteBase, которая указывает префикс адреса, RewriteCond проверяет соответствие, и RewriteRule — изменяет URL в соответствии с регулярным выражением если все правила соответствия подходят.

    Сначала нужно включить Mod_Rewrite, на случай если модуль еще не активен:

    Укажем, что в качестве префикса для URL нужно использовать корень:

    И будем автоматически заменять URL адреса с index.html на index.php, обратите внимание, что исходный URL — это путь к запрашиваемому файлу относительно расположения файла htaccess:

    RewriteRule index.html /index.php

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

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

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

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

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

    RewriteEngine On;
    RewriteBase /;
    RewriteRule ^(.*)\.html$ $1.php

    Директива RewriteCond дает еще больше гибкости, вы можете выбрать к каким адресам стоит применять модификацию, например, будем переопределять данные только для версии с www:

    RewriteBase /;
    RewriteCond % ^www.site.ru$
    RewriteRule ^(.*)\.html$ $1.php

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

    Настройка редиректов в htaccess


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

    Самый простой редирект можно выполнить без mod_rewrite, с помощью такой строки:

    Redirect 301 /index.html https://www.site.ru/index.php

    Но обычно нужны перенаправления с более широким действием. Все выглядит очень похоже, только теперь мы используем флаг [NC] чтобы не учитывать регистр, [L] для прекращения обработки и [R] — для редиректа. Например, перенаправление htaccess с версии без www на домен с www:

    RewriteCond % ^site\.ru$ [NC]
    RewriteRule ^(.*)$ https://www.site.ru/$1 [R=301,L]

    Значение R=301 означает код редиректа, который будет возвращен клиенту, можно использовать 301, 302 и т д. Редирект htaccess с домена www на домен без префикса будет выглядеть так:

    RewriteCond % ^www.site\.ru$ [NC]
    RewriteRule ^(.*)$ https://site.ru/$1 [R=301,L]

    Таким же образом можно сделать переадресацию:

    RewriteRule ^старый_адрес /новый_адрес/$1 [R=301,L]

    Редирект с http версии на https:

    RewriteCond % ^80$ [OR]
    RewriteCond % =on
    RewriteRule ^(.*)$ https://site.ru/$1 [R=301,L]

    Настройка страниц ошибок в htaccess

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

    Настройка htaccess для этого пункта будет очень полезной. Вы можете использовать директиву ErrorDocument. С помощью нее можно задать html страницы для ошибок 4хх и 5хх. Например, для 404:

    ErrorDocument 404 https://site.ru/error/404.shtml
    ErrorDocument 403 https://site.ru/error/403.shtml
    ErrorDocument 401 https://site.ru/error/401.shtml
    ErrorDocument 500 https://site.ru/error/500.shtml

    Кэширование в htaccess

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

    Сначала активируем модуль и устанавливаем период кэширования по умолчанию:

    ExpiresActive On
    ExpiresDefault «access plus 1 month»

    Теперь мы можем настроить кэширование для каждого mime типа файлов:

    ExpiresByType text/html «access plus 1 month 15 days 2 hours»
    ExpiresByType image/gif «access plus 5 hours 3 minutes»
    ExpiresByType image/x-icon «access plus 2592000 seconds»

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

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

    Чтобы быть уверенным что эта конструкция не вызовет ошибок заключите ее в if:

    Сжатие файлов в htaccess

    Для сжатия в Apache можно использовать модуль deflate. Здесь достаточно просто перечислить mime типы файлов, которые нужно сжать. Например:

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

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

    Выводы

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

    На завершение предлагаю видео с обзором конфигурационного файла Apache:

    Руководство по htaccess: трюки и приемы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    ErrorDocument 401 /401.html

    ErrorDocument 403 /403.html

    ErrorDocument 404 /404.html

    ErrorDocument 400 /400.html

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

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

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

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

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

    Options All -Indexes

    Set Default Index File

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

    Защита Htaccess

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Если у вас блог или другой контентный сайт, определенные файлы будут провоцировать диалог “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 https://www.myoldsite.com

    Allow from 111.111.111.111

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

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

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

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

    deny from 127.0.0.1

    deny from 127.0.0.2


    deny from 127.0.0.3

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

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

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

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

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

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

    RewriteCond % ^example.com [NC]

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

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

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

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

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

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

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

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

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

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

    ## Redirect all Pages to Secure ##

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

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

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

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

    ## Standard 301 Redirect for Permanent Changes ##

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

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

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

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

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

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

    ## Redirect for a Directory – Preserves Request ##

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

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

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

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

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

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

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

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

    ## Standard 302 Redirect for Temporary Changes ##

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

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

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

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

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

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

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

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

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

    ## Redirect an Entire Domain – Preserve Request ##

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

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

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

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

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

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

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

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

    ## Redirect an Entire Domain – No Preservation ##

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    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]

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

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

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

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

    GZIP compression

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

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

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


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

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

    php_value output_handler ob_gzhandler

    css_value output_handler ob_gzhandler

    js_value output_handler ob_gzhandler

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

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

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

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

    ## Files to Cache for One Day ##

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

    Header unset Cache-Control

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

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

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

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

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

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

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

    Всё про файл .htaccess

    You are using an outdated browser. Please upgrade your browser.

    By signing up, you agree to our Terms of Service and Privacy Policy.

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

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

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

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

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

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

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

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

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

    Redirect /hosting https://www.examplesite.com
    Redirect /hosting/vps.html https://www.examplesite.com/vps-vds/
    Redirect 301 /domain https://www.examplesite.com/client/domainchecker.php
    теперь введя https://ваш_сайт.ua/hosting, откроется сайт https://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

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

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

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

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

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

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

    При переходе пользователей на Ваш сайт, например https://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:

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

    Ошибки и их обработка в .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 https://examplesite.com/error/404.htm
    ErrorDocument 403 https://examplesite.com/error/403.htm
    ErrorDocument 400 https://examplesite.com/error/400.htm
    ErrorDocument 500 https://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


    Order Deny,Allow
    Deny from all
    Allow from 111.222.333.444

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

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

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

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

    Мастер Йода рекомендует:  Как в Adobe Photoshop нарисовать реалистичные волосы короткие волосы и бороды
  • Добавить комментарий