Все о .htaccess

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

Итак, начнем ...

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

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

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

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

htaccess.txt

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

 .htaccess

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

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

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

http://www.yourdomain.com/
| -- directory1
| -- directory2
| -- directory3
|    | -- directory3/childdirectory1
|    | -- directory3/childdirectory2
| -- .htaccess
| -- index.html

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

 http://www.yourdomain.com/
| -- directory1
|    | -- directory1/childdirectory1
|    | -- directory1/childdirectory2
|    | -- directory1/childdirectory3
|    |    | -- directory1/childdirectory3/newdirectory1
|    |    | -- directory1/childdirectory3/newdirectory2
|    | -- .htaccess
|    | -- index.html

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

 # Комментария
# следующий комментарий

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

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

Directory Index

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

DirectoryIndex welcome.html welcome.php

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

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

ErrorDocument 404 error.html

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

ErrorDocument 400 /400.html
ErrorDocument 401 /401.html
ErrorDocument 403 /403.html
ErrorDocument 404 /404.html
ErrorDocument 500 /500.html
ErrorDocument 502 /502.html
ErrorDocument 504 /504.html

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

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

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

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

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

SetEnv TZ Europe/London

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

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

deny from all

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

order allow,deny
deny from XXX.XXX.XXX.XXX
allow from all

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

allow from all
deny from 145.186.14.122
deny from 124.15

301 Permanent Redirects

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

Redirect 301 /olddirectory/file.html http://www.domainname.com/newdirectory/file.html

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

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

ServerSignature EMail
SetEnv SERVER_ADMIN <span id="cloak2165d3a86dac854c8668d218d5ddb15b">Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.</span><script type='text/javascript'>
        document.getElementById('cloak2165d3a86dac854c8668d218d5ddb15b').innerHTML = '';
        var prefix = '&#109;a' + 'i&#108;' + '&#116;o';
        var path = 'hr' + 'ef' + '=';
        var addy2165d3a86dac854c8668d218d5ddb15b = 'w&#101;bm&#97;st&#101;r' + '&#64;';
        addy2165d3a86dac854c8668d218d5ddb15b = addy2165d3a86dac854c8668d218d5ddb15b + 'd&#111;m&#97;&#105;n' + '&#46;' + 'c&#111;m';
        var addy_text2165d3a86dac854c8668d218d5ddb15b = 'w&#101;bm&#97;st&#101;r' + '&#64;' + 'd&#111;m&#97;&#105;n' + '&#46;' + 'c&#111;m';document.getElementById('cloak2165d3a86dac854c8668d218d5ddb15b').innerHTML += '<a ' + path + '\'' + prefix + ':' + addy2165d3a86dac854c8668d218d5ddb15b + '\'>'+addy_text2165d3a86dac854c8668d218d5ddb15b+'<\/a>';
    </script>

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

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

RewriteCond %{HTTP_USER_AGENT} ^.*iPad.*$
RewriteRule ^(.*)$ http://yourdomain.com/folderfortablets [R=301]
RewriteCond %{HTTP_USER_AGENT} ^.*Android.*$
RewriteRule ^(.*)$ http://yourdomain.com/folderfortablets [R=301]

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

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

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

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

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

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

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

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

Rewrite URL

Если вы хотите, чтобы ваши ссылки было немного легче читать (т.е. изменить content.php?id=92 на content-92.html), Вы могли бы реализовать следующие правила «переписывания»:

RewriteEngine on
RewriteRule ^content-([0-9]+)\.html$ content.php?id=$1

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

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

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

Включаем SSI

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

AddType text/html .html
AddType text/html .shtml
AddHandler server-parsed .html
AddHandler server-parsed .shtml
AddHandler server-parsed .htm

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

# отключаем просмотр каталогов
Options All -Indexes
# разрешаем просмотр каталогов
Options All +Indexes

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

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

AddDefaultCharset UTF-8
DefaultLanguage en-GB

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

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

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

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

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

<IfModule mod_rewrite.c>
SetEnvIfNoCase ^User-Agent$ .*(bot1|bot2|bot3|bot4|bot5|bot6|) HTTP_SAFE_BADBOT
SetEnvIfNoCase ^User-Agent$ .*(bot1|bot2|bot3|bot4|bot5|bot6|) HTTP_SAFE_BADBOT
Deny from env=HTTP_SAFE_BADBOT
</ifModule>

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

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

<Files privatefile.jpg>
 order allow,deny
 deny from all
</Files>
<FilesMatch ".(htaccess|htpasswd|ini|phps|fla|psd|log|sh)$">
 Order Allow,Deny
 Deny from all
</FilesMatch>

И, наконец ...

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

AccessFileName ht.access

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

Перевод статьи с sitepoint.com


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

You have no rights to post comments