О .htaccess и программе passwd
Как установить пароль на директорию посредством файла htaccess:
При этом прочитать ниже про passwd
.htaccess - это стандартное название файла конфигурации папок веб-сервера Apache (самого популярного web-сервера в Интернете). При помощи специальных параметров файла .htaccess Вы можете самостоятельно вносить различные изменения в настройки сервера Apache на своем аккаунте: устанавливать пароли на директории и файлы, настраивать расширения для обработки файлов, задавать собственные страницы ошибок и так далее.
Файл .htaccess служит для настройки параметров папок web-сервера Apache. В отличие от конфигураций всего web-сервера, внесенные в .htaccess изменения вступают в силу сразу же. При этом действуют только на каталог, в котором он находится, и на его подкаталоги. Например, Вы создали файл .htaccess и положили в корень сайта (в каталог www/). Это значит, что все параметры, заданные в .htaccess, будут распространяться на файлы и папки, которые находятся на сайте. Если же Вы этот файл положили в каталог www/images/, то действие файла распространится на файлы и папки находящиеся в каталоге www/images/text/ и так далее. Исключением являются папки, в которых уже есть свой файл .htaccess.
Как видно из названия, .htaccess - файл без имени с расширением htaccess. Создать такой файл можно в любом текстовом редакторе, например, в "Блокноте", и по FTP закачать его на сервер. Чтобы "Блокнот" не подставлял автоматически расширение .txt, во время сохранения в выпадающем списке "тип файла" следует выбрать опцию "Все файлы".
.htpasswd также является текстовым файлом. Он содержит пароли для доступа к папкам веб-сервера. Файл .htpasswd состоит из строк, каждая из которых соответствует конкретному пользователю. Обычно содержимое .htpasswd выглядит следующим образом: логин:шифрованный_пароль.
Рассмотрим две программы для генерации файла .htpasswd.
1. Если у Вас есть ssh-доступ на сервер (доступ к командной строке сервера), то Вы можете воспользоваться утилитой htpasswd. Синтаксис команды таков:
После ввода команды будет запрошен пароль и просьба его повторить. В результате будет создан новый файл .htpasswd или же дополнен старый, содержащий логин и зашифрованный пароль. Если Вы хотите добавить новых пользователей, то следует запустить команду с ключом:
htpasswd -m .htpasswd имя_пользователя
В результате в существующий файл с паролями будет добавлена новая строка с именем пользователя и паролем.
--------------------------------------------------------------------------------
Синтаксис .htaccess для индивидуальных настроек вебсервера Apache.
Вот обязательной синтаксис, несоблюдение которого приводит к ошибкам сервера:
- пути к файлам (директориям) указываются от корня сервера. Пример: /home/user/public_html/dir/file.php
- домены с указанием протокола
Пример: Redirect / http://www.site.ru
Файл имеет название именно "точка" htaccess
Должен быть записан в UNIX-формате. Для оболочки FAR, достигается F4 (редактирование файла), Shift+F2 (выбрать "сохранить как UNIX-текст"). Но можно редактировать и в обычном блокноте windows.
--------------------------------------------------------------------------------
Как запретить веб-посетителям читать файлы в директории?
Запрет на все файлы:
Где all обозначает "все".
--------------------------------------------------------------------------------
Разрешить доступ с определенного ip:
В данном случае, <ваш ip> обозначает конкретный адрес.
Например:
--------------------------------------------------------------------------------
Запретить доступ с определенного ip:
Использование <ваш ip> аналогично для примера выше.
--------------------------------------------------------------------------------
Запрет на группу файлов по маске:
Определяет доступ к файлу по его расширению.
Например запрет на доступ к файлам с расширениям "inc" для веб-посетителей:
В данном примере сам веб-сервер Апач может обращаться к файлам с таким расширениям.
--------------------------------------------------------------------------------
Запрет на конкретный файл:
Можно поставить запрет на конкретный файл по его названию и расширению.
В данном примере стоит запрет на обращения к файлу config.inc.php.
--------------------------------------------------------------------------------
Пароль на директорию:
Значение AuthName будет выводиться для посетителя и может использоваться для пояснения запроса авторизации. Значение AuthUserFile указывает на место, где хранится файл с паролями для доступа к данной директории. Этот файл создается специальной утилитой htpasswd.exe.
Например в директории, которую защищаем паролем создаем такой .htaccess:
В этом примере, посетитель при запросе директории, будет читать фразу "For Registered Users Only", файл с паролями для доступа должен лежать в директории /pub/site.ru/ и называться .htapasswd . Директория указывается от корня сервера, если вы неправильно зададите директорию, то Апач не сможет прочитать файл .htpasswd и никто не получит доступа к данной директории.
Примечание: Процедуру защиты директории можно производить в панели управления cpanel более простым способом.
--------------------------------------------------------------------------------
Пароль только на 1 файл:
Аналогично паролированию директории полностью, можно ставить пароль только на 1 файл.
Пример установки пароля на файл private.zip:
--------------------------------------------------------------------------------
Пароль на группу файлов:
Аналогично, используя, можно ставить пароли по маске файлов.
Пример установки пароля на доступ ко всем файла с расширением "sql":
--------------------------------------------------------------------------------
Проверка прав доступа
Задача: есть каталог a1 и в нем два вложенных каталога a2, a3, введено 2 уровня пользователей. 1 группа имеет доступ только к a1 и a2, 2-я ко всем трем каталогам. Необходимо проводить аутентификацию только 1 раз - при доступе к a1, но при этом соблюдать права на доступ к а2 и а3.
Ник и пароль запрашиваются только при входе на а1 - если у юзвера есть доступ на а2 пароль уже не запрашивается. Если на а3 доступа нет, вылетит табличка "введите пароль".
www.site.ru/a1
www.site.ru/a1/а2
www.site.ru/a1/a3
a1 - общий и вместе с тем закрытый. а2 и а3 только для отдельных личностей.
--------------------------------------------------------------------------------
файл .htaccess для каталога а1:
файл .htaccess для каталога а2:
файл .htaccess для каталога а3:
--------------------------------------------------------------------------------
Как сделать перенаправление (редирект) посетителя?
Редирект на другой url:
Что бы сделать перенаправления посетителя на сайт http://site.ru в .htaccess:
--------------------------------------------------------------------------------
Показ разных страниц, в зависимости от IP адреса посетителя:
Например, перенаправление посетителей с ip адресом 192.12.131.1 на страницу about_my_sity.html:
--------------------------------------------------------------------------------
Перенаправление посетителя при запросе определенных страниц.
Теперь любой запрос с адресом /_vti_bin будет автоматически перенаправляться на Microsoft:
--------------------------------------------------------------------------------
Как сделать стартовой другую страницу?
Что бы поменять страницу, которая будет показываться при обращении к директории, пишем:
Можно указывать несколько страниц.
Приоритет выставляет по очередности в директиве DirectoryIndex
Если размещено в директории два файла index.php и index.html, то в данном случае первым будет открываться index.php
--------------------------------------------------------------------------------
Как заставить Апач обрабатывать SSI директивы?
SSI позволяют "собирать" страницу из кусочков. В одном кусочке у вас код меню, в другом код верхней части страницы, в третьем - нижней. А посетитель видет обычную страницу, которая состоит из того кода, который входит в ваши кусочки.
Необходимы обязательные установки в httpd.conf:
В блоке, начинающемся с и заканчивающийся в строку Options Indexes добавьте Includes.
После, в файле .htaccess пишем:
--------------------------------------------------------------------------------
Как заставить Апач выполнять в html документах php код?
Иногда бывает полезно "обмануть" посетителя, выдавая ему свои php-скрипты или иные файлы, как html файлы. Реально используется для индексации поисковой системой Rambler php-скриптов. Некоторые делаю мелкие фишки, вроде того, что дают файлам расширения совпадающие с какими-либо "знаковыми" именами.
При большой посещаемости сервера может вызвать тормоза.
--------------------------------------------------------------------------------
Как самому обрабатывать ошибки Апача?
Наиболее интересные и полезные ошибки Апача это: 403-404, 500.
403 - пользователь не прошел аутентификацию, запрет на доступ (Forbided).
404 - запрашиваемый документ (файл, директория) не найден.
500 - внутренняя ошибка сервера (к примеру, ошибка в синтаксисе файла .htaccess).
Для того, что бы пользователю при этих ошибках были показаны ваши собственные сообщения об ошибках, в .htaccess пишем:
При этом при возникновении 404 ошибки пользователю загрузится файл errors/403.html.
--------------------------------------------------------------------------------
Удобно делать собственный обработчик на некоторые ошибки. В .htaccess пишем:
В error.php через $HTTP_SERVER_VARS['REQUEST_URI'] определяем какой документ вызвал ошибку и дальше обрабатываем. Если в .htaccess на ErrorDocument стоит указание файла с полным путем (http://site.ru/error.php), то $HTTP_SERVER_VARS['REQUEST_URI'] будет содержать этот файл, а не вызвавший ошибку.
В Internet Explorer 5.0 неправильно обрабатывается файл, вызывающийся при ошибке, если его размер меньше 1 килобайта. Будет вызвана стандартная страница IE 404.
--------------------------------------------------------------------------------
Как поставить запрет на отображение содержимого директории при отсутствии индексного файла?
Предположим, что у вас вся графика, используемая на сайте находится в директории img. Посетитель может набрать в адресной строке браузера эту директорию и увидеть список всех ваших графических файлов. Конечно, это не нанесет вам урона, но можно и не дать такого просмотра посетителю. В .htaccess пишем:
--------------------------------------------------------------------------------
Можно ли указать кодировку на все файлы, в которой по умолчанию получает документы браузер?
На заре интернета и зарождения браузеров, часто была ситуация, что браузер не мог автоматически определить, в какой из русских кодировок написан документ и в браузер выдавалась какая-то каша. Для избежания этого указываем, что все отдаваемые страницы будут иметь кодировку windows-1251:
--------------------------------------------------------------------------------
Можно ли указать кодировку на загружаемые файлы?
При загрузке посетителем файла на сервер, возможна перекодировка его - указываем, что все получаемые файлы будут иметь кодировку windows-1251:
--------------------------------------------------------------------------------
Создал файл .htaccess, но сервер выдает 500 ошибку - Internal Erorr
Ошибка синтаксиса или файл записан не в том формате.
AuthName "Secure Area"
AuthType Basic
AuthUserFile /path_to/.htpasswd
require valid-user
При этом прочитать ниже про passwd
.htaccess - это стандартное название файла конфигурации папок веб-сервера Apache (самого популярного web-сервера в Интернете). При помощи специальных параметров файла .htaccess Вы можете самостоятельно вносить различные изменения в настройки сервера Apache на своем аккаунте: устанавливать пароли на директории и файлы, настраивать расширения для обработки файлов, задавать собственные страницы ошибок и так далее.
Файл .htaccess служит для настройки параметров папок web-сервера Apache. В отличие от конфигураций всего web-сервера, внесенные в .htaccess изменения вступают в силу сразу же. При этом действуют только на каталог, в котором он находится, и на его подкаталоги. Например, Вы создали файл .htaccess и положили в корень сайта (в каталог www/). Это значит, что все параметры, заданные в .htaccess, будут распространяться на файлы и папки, которые находятся на сайте. Если же Вы этот файл положили в каталог www/images/, то действие файла распространится на файлы и папки находящиеся в каталоге www/images/text/ и так далее. Исключением являются папки, в которых уже есть свой файл .htaccess.
Как видно из названия, .htaccess - файл без имени с расширением htaccess. Создать такой файл можно в любом текстовом редакторе, например, в "Блокноте", и по FTP закачать его на сервер. Чтобы "Блокнот" не подставлял автоматически расширение .txt, во время сохранения в выпадающем списке "тип файла" следует выбрать опцию "Все файлы".
.htpasswd также является текстовым файлом. Он содержит пароли для доступа к папкам веб-сервера. Файл .htpasswd состоит из строк, каждая из которых соответствует конкретному пользователю. Обычно содержимое .htpasswd выглядит следующим образом: логин:шифрованный_пароль.
Рассмотрим две программы для генерации файла .htpasswd.
1. Если у Вас есть ssh-доступ на сервер (доступ к командной строке сервера), то Вы можете воспользоваться утилитой htpasswd. Синтаксис команды таков:
htpasswd -c /full/path/.htpasswd имя_пользователя
После ввода команды будет запрошен пароль и просьба его повторить. В результате будет создан новый файл .htpasswd или же дополнен старый, содержащий логин и зашифрованный пароль. Если Вы хотите добавить новых пользователей, то следует запустить команду с ключом:
htpasswd -m .htpasswd имя_пользователя
В результате в существующий файл с паролями будет добавлена новая строка с именем пользователя и паролем.
--------------------------------------------------------------------------------
Синтаксис .htaccess для индивидуальных настроек вебсервера Apache.
Вот обязательной синтаксис, несоблюдение которого приводит к ошибкам сервера:
- пути к файлам (директориям) указываются от корня сервера. Пример: /home/user/public_html/dir/file.php
- домены с указанием протокола
Пример: Redirect / http://www.site.ru
Файл имеет название именно "точка" htaccess
Должен быть записан в UNIX-формате. Для оболочки FAR, достигается F4 (редактирование файла), Shift+F2 (выбрать "сохранить как UNIX-текст"). Но можно редактировать и в обычном блокноте windows.
--------------------------------------------------------------------------------
Как запретить веб-посетителям читать файлы в директории?
Запрет на все файлы:
deny from all
--------------------------------------------------------------------------------
Разрешить доступ с определенного ip:
order allow deny
deny from all
allow from <ваш ip>
В данном случае, <ваш ip> обозначает конкретный адрес.
Например:
order allow deny
deny from all
allow from 192.126.12.199
--------------------------------------------------------------------------------
Запретить доступ с определенного ip:
order allow deny
deny from all
deny from <ваш ip>
Использование <ваш ip> аналогично для примера выше.
--------------------------------------------------------------------------------
Запрет на группу файлов по маске:
<Files "\.(inc|sql|...другие расширения...)$">
order allow,deny
deny from all
</Files>
Определяет доступ к файлу по его расширению.
Например запрет на доступ к файлам с расширениям "inc" для веб-посетителей:
<Files "\.(inc)$">
order allow,deny
deny from all
</Files>
В данном примере сам веб-сервер Апач может обращаться к файлам с таким расширениям.
--------------------------------------------------------------------------------
Запрет на конкретный файл:
Можно поставить запрет на конкретный файл по его названию и расширению.
<Files config.inc.php>
order allow,deny
deny from all
</Files>
В данном примере стоит запрет на обращения к файлу config.inc.php.
--------------------------------------------------------------------------------
Пароль на директорию:
AuthName "Private zone"
AuthType Basic
AuthUserFile /home/user/.htpasswd
require valid-user
</Files>
Значение AuthName будет выводиться для посетителя и может использоваться для пояснения запроса авторизации. Значение AuthUserFile указывает на место, где хранится файл с паролями для доступа к данной директории. Этот файл создается специальной утилитой htpasswd.exe.
Например в директории, которую защищаем паролем создаем такой .htaccess:
AuthName "For Registered Users Only"
AuthType Basic
AuthUserFile /pub/site.ru/.htpasswd
require valid-user
</Files>
В этом примере, посетитель при запросе директории, будет читать фразу "For Registered Users Only", файл с паролями для доступа должен лежать в директории /pub/site.ru/ и называться .htapasswd . Директория указывается от корня сервера, если вы неправильно зададите директорию, то Апач не сможет прочитать файл .htpasswd и никто не получит доступа к данной директории.
Примечание: Процедуру защиты директории можно производить в панели управления cpanel более простым способом.
--------------------------------------------------------------------------------
Пароль только на 1 файл:
Аналогично паролированию директории полностью, можно ставить пароль только на 1 файл.
Пример установки пароля на файл private.zip:
<Files private.zip>
AuthName "Users zone"
AuthType Basic <br />
AuthUserFile /pub/home/твой_логин/.htpasswd
</Files>
--------------------------------------------------------------------------------
Пароль на группу файлов:
Аналогично, используя
Пример установки пароля на доступ ко всем файла с расширением "sql":
<Files "\.(sql)$">
AuthName "Users zone"
AuthType Basic <br />
AuthUserFile /pub/home/твой_логин/.htpasswd
</Files>
--------------------------------------------------------------------------------
Проверка прав доступа
Задача: есть каталог a1 и в нем два вложенных каталога a2, a3, введено 2 уровня пользователей. 1 группа имеет доступ только к a1 и a2, 2-я ко всем трем каталогам. Необходимо проводить аутентификацию только 1 раз - при доступе к a1, но при этом соблюдать права на доступ к а2 и а3.
Ник и пароль запрашиваются только при входе на а1 - если у юзвера есть доступ на а2 пароль уже не запрашивается. Если на а3 доступа нет, вылетит табличка "введите пароль".
www.site.ru/a1
www.site.ru/a1/а2
www.site.ru/a1/a3
a1 - общий и вместе с тем закрытый. а2 и а3 только для отдельных личностей.
--------------------------------------------------------------------------------
файл .htaccess для каталога а1:
AuthName "Input password"
AuthType Basic
AuthUserFile "/home/user/public_html/clousearea/.htpasswd"
<Files *.*>
require valid-user
</Files>
файл .htaccess для каталога а2:
AuthName "Input password"
AuthType Basic
AuthUserFile "/home/user/public_html/clousearea/.htpasswd"
<Files *.*>
require user user1 user2 user3
</Files *.*>
файл .htaccess для каталога а3:
AuthName "Input password"
AuthType Basic
AuthUserFile "/home/user/public_html/clousearea/.htpasswd"
<Files *.*>
require user user1 user4 user5
</Files *.*>
--------------------------------------------------------------------------------
Как сделать перенаправление (редирект) посетителя?
Редирект на другой 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
--------------------------------------------------------------------------------
Как сделать стартовой другую страницу?
Что бы поменять страницу, которая будет показываться при обращении к директории, пишем:
DirectoryIndex <нужная страница>
Можно указывать несколько страниц.
DirectoryIndex index.shtml index.php index.php5 index.html index.htm
Приоритет выставляет по очередности в директиве DirectoryIndex
Если размещено в директории два файла index.php и index.html, то в данном случае первым будет открываться index.php
--------------------------------------------------------------------------------
Как заставить Апач обрабатывать SSI директивы?
SSI позволяют "собирать" страницу из кусочков. В одном кусочке у вас код меню, в другом код верхней части страницы, в третьем - нижней. А посетитель видет обычную страницу, которая состоит из того кода, который входит в ваши кусочки.
Необходимы обязательные установки в httpd.conf:
В блоке, начинающемся с
После, в файле .htaccess пишем:
AddHandler server-parsed .shtml .shtm .html .htm
--------------------------------------------------------------------------------
Как заставить Апач выполнять в html документах php код?
Иногда бывает полезно "обмануть" посетителя, выдавая ему свои php-скрипты или иные файлы, как html файлы. Реально используется для индексации поисковой системой Rambler php-скриптов. Некоторые делаю мелкие фишки, вроде того, что дают файлам расширения совпадающие с какими-либо "знаковыми" именами.
RemoveHandler .html .htm
AddType application/x-httpd-php .php .htm .html .phtml
При большой посещаемости сервера может вызвать тормоза.
--------------------------------------------------------------------------------
Как самому обрабатывать ошибки Апача?
Наиболее интересные и полезные ошибки Апача это: 403-404, 500.
403 - пользователь не прошел аутентификацию, запрет на доступ (Forbided).
404 - запрашиваемый документ (файл, директория) не найден.
500 - внутренняя ошибка сервера (к примеру, ошибка в синтаксисе файла .htaccess).
Для того, что бы пользователю при этих ошибках были показаны ваши собственные сообщения об ошибках, в .htaccess пишем:
ErrorDocument 403 /errors/403.html
ErrorDocument 404 /errors/404.html
ErrorDocument 500 /errors/500.html
При этом при возникновении 404 ошибки пользователю загрузится файл errors/403.html.
--------------------------------------------------------------------------------
Удобно делать собственный обработчик на некоторые ошибки. В .htaccess пишем:
ErrorDocument 403 /errors/error.php?403
ErrorDocument 404 /errors/error.php?404
ErrorDocument 500 /errors/error.php?500
В error.php через $HTTP_SERVER_VARS['REQUEST_URI'] определяем какой документ вызвал ошибку и дальше обрабатываем. Если в .htaccess на ErrorDocument стоит указание файла с полным путем (http://site.ru/error.php), то $HTTP_SERVER_VARS['REQUEST_URI'] будет содержать этот файл, а не вызвавший ошибку.
В Internet Explorer 5.0 неправильно обрабатывается файл, вызывающийся при ошибке, если его размер меньше 1 килобайта. Будет вызвана стандартная страница IE 404.
--------------------------------------------------------------------------------
Как поставить запрет на отображение содержимого директории при отсутствии индексного файла?
Предположим, что у вас вся графика, используемая на сайте находится в директории img. Посетитель может набрать в адресной строке браузера эту директорию и увидеть список всех ваших графических файлов. Конечно, это не нанесет вам урона, но можно и не дать такого просмотра посетителю. В .htaccess пишем:
Options -Indexes #- запретить
Options +Indexes #- разрешить
--------------------------------------------------------------------------------
Можно ли указать кодировку на все файлы, в которой по умолчанию получает документы браузер?
На заре интернета и зарождения браузеров, часто была ситуация, что браузер не мог автоматически определить, в какой из русских кодировок написан документ и в браузер выдавалась какая-то каша. Для избежания этого указываем, что все отдаваемые страницы будут иметь кодировку windows-1251:
AddDefaultCharset windows-1251
--------------------------------------------------------------------------------
Можно ли указать кодировку на загружаемые файлы?
При загрузке посетителем файла на сервер, возможна перекодировка его - указываем, что все получаемые файлы будут иметь кодировку windows-1251:
CharsetSourceEnc windows-1251
--------------------------------------------------------------------------------
Создал файл .htaccess, но сервер выдает 500 ошибку - Internal Erorr
Ошибка синтаксиса или файл записан не в том формате.