О файле .htaccess
.htaccess (от. англ. hypertext access) — файл дополнительной конфигурации веб-сервера Apache, а также подобных ему серверов. Позволяет задавать большое количество дополнительных параметров и разрешений для работы веб-сервера в отдельных каталогах (папках), таких как управляемый доступ к каталогам, переназначение типов файлов и т.д., без изменения главного конфигурационного файла.
Файл .htaccess может быть размещён в любом каталоге. Директивы этого файла действуют на все файлы в текущем каталоге и во всех его подкаталогах (если эти директивы не переопределены директивами нижележащих файлов .htaccess).
Для того чтобы эти файлы .htaccess можно было использовать, необходимы соответствующие настройки главного конфигурационного файла (значение директивы AllowOverride должно быть установлено All). Как правило, подавляющее большинство хостеров разрешают использовать свои файлы .htaccess.
Как .htaccess выглядит?
.htaccess — это обычный текстовый файл и создается как обычный файл в любом редакторе. Существует небольшая проблема создать .htaccess текстовым редактором, потому что обычно он создает .htaccess как.htaccess.txt. В этом случае достаточно создать файл, загрузить его на сервер и там переименовать в .htaccess.
Знание возможностей конфигурации файла .htaccess необходимо для веб-мастеров для, чтобы улучшить поисковую оптимизацию веб-страницы и повысить безопасность своего сайта. При правильном использовании, конфигурационный файл web-сервера Apache — .htaccess представляет собой очень мощное средство в инструментарии разработчика.
Редирект из поддомена в каталог
Задача
Поставлена задача перенаправлять запросы к поддоменам в каталоги на сервере. Например sub1.example.com нужно переделать в example.com/sub1.
Решение
RewriteCond %{HTTP_HOST} !^(www|ftp|mail)\.example\.com RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.com RewriteRule (.*) /%1/$1 [L]
Таким образом, любой запрос типа sub1.example.com/foo (кроме www, ftp, mail) будет преобразовываться в example.com/sub1/foo.
Перенаправляем со старого домена на новый
Используя .htaccess, можно настроить перенаправление со старого доменного имени на новое. Например:
RewriteEngine On RewriteRule ^(.*)$ http://www.domainname-new.com/$1 [R=301,L]
Перенаправление используется в том случае, если существующий сайт переносится на новое доменное имя. В этом случае любой пользователь, который наберет в адресной строке www.domainname-old.com будет перенаправлен на www.domainname-new.com.
Перенаправление на другую страницу
Для редиректа с одной страницы на другую можно использовать следующие настройки (например, изменилась структура сайта, и необходимо чтобы по старым ссылкам можно было попасть на новую версию):
Redirect 301 /company/about.html http://domain.com/company/about/index.html
Ограничение доступа
С помощью файла .htaccess можно управлять доступом к ресурсам сервера.
Для этого ограничения используются директивы
Order
,
Allow
и
Deny
Директива Order
Устанавливает порядок работы директив
Deny
,
Allow
и
Order порядок
Где порядок может принимать значения
Deny,Allow
или
Allow,Deny
По умолчанию:
Order Deny, Allow
Директива Deny
Запрещает доступ определенных клиентов к ресурсам.
Deny from all|host
где
host
может принимать значения IP адреса или имени хоста.
Директива Allow
В отличие от
Deny
разрешает доступ определенных клиентов к ресурсам.
Allow from all|host
host
может принимать значения IP адреса или имени хоста.
Примеры использования директив Order, Allow, Deny
Запретить доступ для всех:
Order deny,allow Deny from all
Разрешить доступ для определенных адресов:
Order deny,allow Deny from all Allow from 192.168.1.1 Allow from 172.16.1.1
Запретить доступ с определенных адресов:
Order allow, deny Allow from all Deny from 192.168.1.1 Deny from 172.16.1.1
Защита файлов от скачивания
С помощью .htaccess можно управлять доступом к файлам сервера.
Например, так можно полностью запретить доступ к файлу .htaccess:
# Закрываем доступ к .htaccess <Files .htaccess> Order deny, allow Deny from all </Files>
Также можно разрешать или запрещать доступ к файлам с определенных IP-адресов. Например:
# Открыть доступ для определенного IP <Files config.inc> Order deny, allow Deny from all Allow from 192.168.1.1 </Files> # Закрываем доступ с определенного IP <Files config.inc> Order allow, deny Allof from all Deny from 192.168.1.1 </Files>
Ограничить доступ ко всему сайту
С помощью .htaccess можно управлять доступом ко всему сайту. К примеру, если сайт еще в разработке, но его нужно показывать заказчику, да и самому иметь возможность тестировать его на реальном сервере.
<Limit GET POST PUT> Order deny,allow Deny from all Allow from 192.168.1.1 Allow from 172.16.1.1 </Limit>