Помощь
Все разделы помощи → Вопросы по виртуальному хостингу
- Назначение и использование файла .htaccess
-
Файл .htaccess (обратите внимание, что первый символ в названии файла — точка) применяется для управления веб-сервером Apache со стороны конечного пользователя хостинга. Вы помещаете в этот файл директивы, которые веб-сервер воспринимает и обрабатывает, выполняя действия в соответствии с настройками, которые были сделаны пользователем.
Файл .htaccess может быть размещен в корневом каталоге веб-сервера (прямо в каталоге www). В этом случае директивы из такого .htaccess действуют по всему веб-серверу. Также .htaccess может находиться и в конкретном подкаталоге сервера. Тогда директивы, которые указаны в этом файле, «перекрывают» действие директив из «основного» файла, который размещен в каталоге www или в любом каталоге более высокого уровня. То есть, действие директив из .htaccess наследуется сверху вниз, но не наоборот. Изменения, внесенные в файл, вступают в силу немедленно. Это связано с тем, что информация из .htaccess перечитывается при каждом обращении к веб-серверу Apache.
В .htaccess может быть помещено большинство из доступных директив для веб-сервера. Следует заметить, что директивы, в описании которых в поле Context отсутствует упоминание .htaccess недоступны для использования в этом файле конфигурации.
Если использовать нужную директиву не получилось, и вы увидели ошибку после добавления директивы в .htaccess, скорее всего, использование команды запрещено в условиях виртуального хостинга. Напишите в техническую поддержку, мы постараемся вам помочь. Просьба подробно описать проблему и указать цели, которых хотите достичь использованием данной директивы.
- Синтаксис .htaccess
-
Вот обязательный синтаксис, несоблюдение которого приводит к ошибкам сервера:
- пути к файлам (директориям) указываются от корня сервера. Пример: /home/httpd/vhosts/ваш_домен/httpdocs/config/.htpasswords
- домены с указанием протокола. Пример: Redirect / http://www.ваш_сайт.ru
Файл имеет название именно "точка" htaccess Должен быть записан в UNIX-формате. Для оболочки FAR, достигается F4 (редактирование файла), Shift+F2 (выбрать "сохранить как UNIX-текст").
- Как запретить веб-посетителям читать файлы в директории
-
Запрет на все файлы:
deny from all
Где all обозначает "все".
Разрешить доступ с определенного ip:
order deny,allow
deny from all
allow from <ваш ip>В данном случае, <ваш ip> обозначает конкретный адрес.
Например:
order deny,allow
deny from all
allow from 192.126.12.199Запретить доступ с определенного ip:
order allow,deny
allow from all
deny from <ваш ip>Использование <ваш ip> аналогично для примера выше.
Запрет на группу файлов по маске:
<Files "\.(inc|sql|...другие расширения...)$">
order allow,deny
deny from all
</Files>Определяет доступ к файлу по его расширению.
Например запрет на доступ к файлам с расширениям "inc" для веб-посетителей:
<Files "\.(inc)$"><br>
order allow,deny<br>
deny from all<br>
</Files>В данном примере сам веб-сервер Апач может обращаться к файлам с таким расширениям.
Запрет на конкретный файл:
Можно поставить запрет на конкретный файл по его названию и расширению.
<Files config.inc.php>
order allow,deny
deny from all
</Files>В данном примере стоит запрет на обращения к файлу config.inc.php.
- Заголовок last-modified
-
В ряде случаев требуется, чтобы web-сервер выдавал HTTP-заголовок Last-Modified. К примеру, при регистрации вашего ресурса на Яндексе, возникает ошибка «Неправильные даты». Для статических документов cервер будет выдавать значение last-modified всегда. Это действительно для html-файлов.
Для SSI cервер будет выдавать значение last-modified в том случае, если прописана директива «XBitHack full» (просто пропишите эту строку в .htaccess), и для файла, к которому происходит обращение, выставлен атрибут «исполняемый» для группы.
В скриптах last-modified выдается иными средствами. Например, если учесть то, что php-скрипт генерирует код динамически, то самым логичным будет в качестве last-modified отдавать текущую дату и время.
Реализуется это следующим образом:
<? header("Last-Modified: " . gmdate("D, d M Y H:i:s")
. " GMT"); ?>Внимание: команда header должна выполняться в php-скрипте до того, как скрипт начнет выдавать html-текст в браузер пользователя.
- Запрет доступа к некоторым файлам
-
Иногда возникает необходимость запретить доступ к определенным файлам. Например, к конфигурационным файлам, содержащим реквизиты доступа к базам данных, интерфейсам и т.п. Допустим, в файле config.cfg вы храните логин/пароль доступа к базе данных. Создаем в этой директории файл .htaccess с директивами:
<FilesMatch ".(cfg)$">
Order allow,deny
Deny from all
</FilesMatch>Теперь, если посетитель наберет в браузере нечто вида http://www.ваш_домен.ru//config.cfg, он получит ошибку 403 или вашу страницу для этой ошибки.
- Запрет доступа с некоторых IP адресов
-
Иногда возникает необходимость запретить доступ к сайту или его части с некоторых IP адресов. В таком случае необходимо создать в нужной директории файл .htaccess с директивами:
Order allow,deny
Allow from All
Deny from 172.16.32.64Теперь при попытке обратиться к сайту с IP адреса 172.16.32.64 посетитель получит ошибку 403 или вашу страницу для этой ошибки.
Указание части адреса в виде "172.16.32" ограничит доступ из подсети 172.16.32/24. С более подробной документацией Вы можете ознакомиться в документации по Apache.
- Запрет и разрешение выдачи листинга
-
В ряде случаев требуется выводить список файлов в каталоге (листинг каталога) в случае отсутствия в каталоге файла, который показывается по умолчанию. В этом случае необходимо добавить в .htaccess следующую строку:
Options +Indexes
Файл .htaccess необходимо создавать именно в том каталоге, в котором планируется разрешить листинг.
По умолчанию включена директива Options -Indexes, и в случае отсутствия индексной страницы вы получите HTTP ошибку 403.
- Как закрыть директорию паролем
-
Одна из стандартных задач, которая решается путем использования .htaccess, это ограничение доступа к определенному каталогу на сервере. Например, нужно дать доступ к определенному каталогу отдельным посетителям, снабдив их при этом уникальными логином и паролем.
Создаем в каталоге, к которому хотим ограничить доступ по паролю, файл .htaccess с такими директивами:
AuthType Basic
AuthName "Some Name"
AuthUserFile /home/httpd/vhosts/ваш_сайт/httpdocs/.htpasswd
require valid-userВ директиве AuthUserFile указываем абсолютный путь к файлу с логинами/паролями, который мы создадим чуть позже. Если вы создаете файл .htaccess на своем компьютере, а не сразу на сервере используя текстовый редактор, обратите особое внимание на то, что .htaccess должен передаваться по FTP строго в текстовом (ASCII) режиме.
Создаем файл паролей. Файл с паролями должен содержать строки вида login:password. Пароль должен быть зашифрован с использованием алгоритма MD5. Один из способов создать такой файл - воспользоваться программой, входящей в поставку Apache - htpasswd (на нашем сервере она находится в каталоге /usr/local/bin/, полный путь - /usr/local/bin/htpasswd).
Рассмотрим как создать файл паролей в unix shell прямо на сервере. Зайдем в shell и будем выполнять следующие команды:
- htpasswd -mbc .htpasswd user1 sNQ7j9oR2w - создаем новый файл .htpasswd, в который добавляем запись для пользователя user1 с паролем, указанным в командной строке. Просьба обязательно заменить sNQ7j9oR2w на любой собственный пароль - здесь этот пароль указан только для примера
- htpasswd .htpasswd user2 - добавляем в уже существующий файл .htpasswd пользователя user2, а пароль вводим вручную в ответ на соответствующий запрос программы
Если вы используете Windows и не хотите пользоваться unix shell для генерации паролей, можно загрузить Windows-версию программы htpasswd здесь и создать файл с паролями на своем компьютере, после чего загрузить его на сервер. Если у вас уже установлена Windows-версия Apache, файл htpasswd.exe можно найти в каталоге Program Files\Apache Group\Apache/bin\.
Итак, получите htpasswd.exe и используйте его для генерации паролей таким образом:
- htpasswd.exe -mc .htpasswd user1 - создаем новый файл паролей .htpasswd, пароль и его подтверждение будут запрошены интерактивно
- htpasswd.exe -m .htpasswd user2 - добавляем пользователя user2 в существующий файл паролей .htpasswd, запросив пароль интерактивно
После окончания заведения всех логинов файл нужно загрузить на сервер.
- Как заставить Апач обрабатывать SSI директивы
-
В .htaccess добавляем:
AddHandler server-parsed .расширение
Например:
AddHandler server-parsed .html
По умолчанию SSI директивы обрабатываются в файлах имеющих расширение .shtml
- Как переопределить кодировку html-документов
-
Мы хотим «объяснить» веб-серверу что все html-документы, которые размещены на сервере, нужно «отдавать» клиенту в кодировке koi8-r, а не в windows-1251, как это сервер делает по умолчанию. Для этого поместим в .htaccess строку:
AddType "text/html; charset=koi8-r" .html .htm .shtml
Получив такой .htaccess, веб-сервер Apache станет выдавать клиентскому браузеру заголовок, в котором будет указано, что документ имеет кодировку koi8-r.
Если на вашем ресурсе существуют html-документы в разных кодировках, (ISO-8859-1, Windows-1250, Windows-1252, UTF-8), то вам, возможно, будет необходимо отключить принудительну выдачу заголовка с кодировкой windows-1251. Для этого в .htaccess добавляется строка:
AddDefaultCharset Off
При этом соответствующая кодировка должна быть прописана на каждой html-странице в виде тега <http-equiv="Content-type" content="text/html; charset=windows-1251" />
- Как сделать стартовой другую страницу
-
Что бы поменять страницу, которая будет показываться при обращении к директории, пишем:
DirectoryIndex <нужная страница>
Можно указывать несколько страниц.
DirectoryIndex index.shtml index.php index.php3 index.html index.htm
- Как сделать чтобы php скрипты обрабатывались в .html файлах
-
Добавьте строку в .htaccess
AddType application/x-httpd-php .html
- Обработка ошибок
-
Директива ErrorDocument позволяет устанавливать альтернативные страницы ошибок.
Синтаксис: ErrorDocument code URL-path
URL-path - локальный адрес страницы
code - код ошибки. Наиболее типичные коды ошиброк:
401 — Требуется авторизация (Authorization Required)
403 — пользователь не прошел аутентификацию, запрет на доступ (Forbided)
404 — запрашиваемый документ (файл, директория) не найден (Not Found)
500 — внутренняя ошибка сервера — ошибка скрипта или ошибка в синтаксисе файла .htaccess - (Internal Server Error)
ErrorDocument 401 /401.html
ErrorDocument 403 /403.html
ErrorDocument 404 /404.html
ErrorDocument 500 /500.html - Перенаправления (редирект)
-
Редирект на другой url:
Что бы сделать перенаправления посетителя на сайт http://site.ru в .htaccess
Redirect / http://www.site.ru
Показ разных страниц, в зависимости от IP адреса посетителя:
SetEnvIf REMOTE_ADDR <нужный ip адрес> REDIR="redir"
RewriteCond %{REDIR} redir
RewriteRule ^/$ /another_page.htmlНапример, перенаправление посетителей с ip адресом 192.12.131.1 на страницу about_my_sity.html:
SetEnvIf REMOTE_ADDR 192.12.131.1 REDIR="redir"
RewriteCond %{REDIR} redir
RewriteRule ^/$ /about_my_sity.htmlПеренаправление посетителя при запросе определенных страниц:
Это уже для всех сетевых вирусов и сканеров. Теперь любой запрос с адресом /_vti_bin будет автоматически перенаправляться на Microsoft:
redirect /_vti_bin http://www.microsoft.com
redirect /scripts http://www.microsoft.com
redirect /MSADC http://www.microsoft.com
redirect /c http://www.microsoft.com
redirect /d http://www.microsoft.com
redirect /_mem_bin http://www.microsoft.com
redirect /msadc http://www.microsoft.com
RedirectMatch (.*)\cmd.exe$ http://www.microsoft.com$1 - Управление кэшированием
-
Для того, чтобы сайт работал максимально эффективно, целесообразно устанавливать время кэширования для различных типов файлов на максимально возможный срок. Для этого существует модуль Apache mod_expires.
Настройка параметров модуля mod_expires производится в файле.htaccess, что позволяет сделать индивидуальные настройки для каждого каталога.
В приведенном ниже примере отключено кэширование для текстовых документов, установлен период обновления для файлов с расширением gif — 3 месяца с момента изменения файла, для файлов с расширением jpeg — 1 день с момента обращения:
ExpiresActive on
ExpiresByType image/jpeg "access plus 1 day"
ExpiresByType image/gif "modification plus 3 months"
ExpiresByType text/html "now"Примечание: При использовании Parser если вам необходимо полностью исключить заголовки от модуля Apache mod_expires, то для этого необходимо в директории с parser3.cgi создать файл .htaccess и внести в него следующую директиву:ExpiresActive off