.htaccess - настройка и примеры

Файл htaccess – настройка

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

А теперь немного подробнее:

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

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

Особенности использования htaccess:

  • 1. Можно переопределять директивы, прописанных в главном файле httpd.confg
  • 2. Если расположить htaccess-файл в корневой каталог, он распространится на весь сайт
  • 3. Разместить htaccess-файл можно в любой каталог, а его директивы будут применены ко всем подкаталогам
  • 4. Htaccess не доступен пользователю для просмотра из браузера, так как относится к категории «системные».

Важно:
Для того, чтобы создать новый файл с расширением htaccess, необходимо, открыть блокнот или другой текстовый редактор, написать код, сохранить файл, указав расширение .htaccess (точка в переди). Затем остается забросить его в директорию, для которой он предназначался.
Не забывайте про резервное копирование. И ещё, пути к файлам (директориям) указываются от корня сервера.
Домены записываются с указанием протокола http:// или https://корня сервера.
Редактировать файл удобнее всего при помощи редактора AkelPad, входящего в состав Total Commander, достаточно его выделить и нажать F4.
Директива Redirect и директива RewriteRule
Перенаправление на новую страницу сайту (если сайт переехал или т.п.):
 Redirect 301 /prog(старая страница).html http://progC.ru/newprog(новая страница).html
Перенаправление домена с www на без www
Это вечная тема для дискуссий — использовать или не использовать www, но это важно освоить :

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

Перенаправление с www на без www для HTTP или HTTPS
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.
RewriteCond %{HTTPS}s ^on(s)|off
RewriteCond http%1://%{HTTP_HOST} ^(https?://)(www\.)?(.+)$
RewriteRule ^ %1%3%{REQUEST_URI} [R=301,L]

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

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

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

RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

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

SetEnvIf REMOTE_ADDR 183.11.101.1 REDIR="redir"
RewriteCond %{REDIR} redir
RewriteRule ^/$ /kontakt.html

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

RewriteEngine on
RewriteCond %{REQUEST_URI} !/info.html$
RewriteCond %{REMOTE_HOST} !^14\.124\.400\.65(свой адрес)
RewriteRule $ http://vash-sait.ru/info.html [R=302,L]

Перенаправление на безопасное https-соединение( гарантирующие безопасность и надежность передачи данных между сервером и клиентом)

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

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

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

Запретить доступ всем, кроме…

 Require all denied
 Require ip xxx.xxx.xxx.xxx

Разрешить доступ всем, кроме…

 Require all granted
Require not ip xxx.xxx.xxx.xxx
 Require not ip xxx.xxx.xxx.xxy

Принудительное использование HTTPS

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

Принудительное использование HTTPS на прокси (Полезно, если вы используете прокси )

RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

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

RewriteEngine on
RewriteCond %{HTTP_REFERER} ^https?://(.+\.)?badsite\.com [NC,OR]
RewriteCond %{HTTP_REFERER} ^https?://(.+\.)?badsite2\.com [NC,OR]
RewriteRule \.(jpe?g|png|gif|bmp)$ - [NC,F,L]

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

AuthName "One still does not simply"
AuthType Basic
AuthUserFile /home/fellowship/.htpasswd
<Files "one-ring.o">
Require valid-user
</Files>
<FilesMatch ^((one|two|three)-rings?\.o)$>
Require valid-user
</FilesMatch>

Обработка ошибок - директива ErrorDocument
Пользовательская страница ошибок

Страница на которой будет выводиться более подробная информация о причинах неудачного выполнения запроса.
ErrorDocument 404 "/404.html"
Создание своих страниц с описанием ошибок
Для тех, кто устал от привычных страниц, выводящих описание ошибок, произошедших на сайте, предоставляется возможность воспользоваться своими собственными заготовками. Нужно лишь самому сверстать несколько файлов с разрешением *.html, с необходимым содержимым и внести запись в htaccess-файл.
ErrorDocument 401 /errors401.html
ErrorDocument 403 /errors403.html
ErrorDocument 404 /errors404.html
ErrorDocument 500 /errors505.html

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

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

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

RemoveHandler .php .htm .html
AddHandler application/x-httpd-php .php .htm .html

Заставить выполнять PHP в файлах JavaScript
AddType application/x-httpd-php .js
AddHandler x-httpd-php5 .js
<FilesMatch "\.(js|php)$">
SetHandler application/x-httpd-php
</FilesMatch>

Ограничение размера загружаемого файла для PHP
php_value upload_max_filesize 20M
20M - это ращмер файла в мегабайтах
Изменить максимальный размер запроса для загрузки в PHP
php_value post_max_size 10M
Изменить время исполнения скрипта
php_value max_execution_time 30
30 - время исполнения скрипта в секундах.
. Изменение времени на разбор введенных данных
php_value max_input_time 60