Хостинг в Украине: .HTACCESS. Синтаксис файла .htaccess (практически полностью: .htpasswd, редирект (Redirect) и т.д.) - Хостинг в Украине

Перейти к содержимому

Привет, гость!

 
Регистрация! Забыли пароль?
 

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

.HTACCESS. Синтаксис файла .htaccess (практически полностью: .htpasswd, редирект (Redirect) и т.д.)

#1 Пользователь офлайн   Aladdin 

  • ФИО: Праведно-Счастливый Аладдин Ярославович
  • PipPipPipPipPipPip
  • Группа: Пользователь хостинга
  • Сообщений: 1 609
  • Регистрация: 25 ноября 06

Отправлено 04 ноября 2008 - 13:50

Выкладываю в форум, так как ЦМСка постоянно отрезает выжные моменты предоставленного здесь кода.

Данные рекомендации тестировались на веб-сервере Apache/1.3.20 [ http://apache.org ] под операционную систему Windows 95/98 4.10 [ http://microsoft.com ]

Оглавление

Для чего служит .htaccess?
Синтаксис .htaccess
Настройки сервера Apache для использования файла .htaccess

Запреты на доступ:
  • Запрет на все файлы
  • Разрешить доступ только с определенного ip
  • Запретить доступ только для определенного ip
  • Запрет доступа на группу файлов по маске
  • Запрет доступа на конкретный файл



Установка пароля:
  • Пароль на директорию
  • Пароль только на 1 файл
  • Пароль на группу файлов
  • Есть 3 директории (две из них вложены в первую), доступ к ним - по паролю. Но, и всех, вошедших по паролю в директорию 1 нельзя пускать в две оставшиеся директории. Как сделать?


Перенаправления:
  • Перенаправление (редирект) посетителя на другой url
  • Показ разных страниц, в зависимости от IP адреса посетителя:
  • Перенаправление посетителя при запросе определенных страниц:
  • Как сделать стартовой другую страницу?
  • Как заставить Апач обрабатывать SSI директивы?
  • Как заставить Апач выполнять php код в файлах с расширением отличным от php?
  • Как самому обрабатывать ошибки Апача?
  • Как поставить запрет на отображение содержимого директории при отсутствии индексного файла?



Кодировки:
  • Можно ли указать кодировку на все файлы, в которой по умолчанию получает документы браузер?
  • Можно ли указать кодировку на загружаемые файлы?
  • Я закачиваю на сайт файл в одной кодировке, а Apache их перекодирует, как избавиться?
  • Как применять различные кодировки для различных типов файлов?


Частые ошибки:
  • Создал файл .htaccess, но сервер выдает 500 ошибку - Internal Erorr





Для чего служит .htaccess?

Набирая адрес в строке браузера, вы получаете на свой компьютер файлы, которые отображает браузер. Управление тем, какие файлы и как вам показывать (пересылать) осуществляет веб-сервер. Наиболее популярных серверов два: IIS и Apache.
Как и любая программа, веб-сервер имеет определенные настройки. Но, у вас, как пользователя Апача может (и скорее всего не будет, если говорить о виртуальном хостинге) прав менять конфигурацию Апача через его главные файлы, действие которых распространяется на всех пользователей этого сервера. Но, вы можете менять некоторые конфигурационные файлы, который распространяют свое действие только на ваш сайт. Один из таких файлов - .htaccess
Это файл гибкой настройки веб-сервера Апач. "Гибкий" обозначает, что как только вы поменяли что-то в этом файле, изменения тут же вступают в силу. С помощью него можно переопределить многие директивы из файла httpd.conf (этот файл является главным конфигурационным файлом сервера Апач и его действия распространяются полностью на всех пользователей данной копии Апача). В случаях, когда у вас нет доступа в файлу настройки Апача (тот же виртуальный хостинг), вам поможет именно этот файл.
Этот файл не доступен веб-пользователю из браузера. Если файл .htaccess расположен в корневой директории сервера, то его действия распространяется на весь сервер, кроме тех папок, где находится другой файл .htaccess (и кроме всех папок "ниже" этой папки со вторым .htaccess).
Пример:
Структура ваших директорий на сервере такая:
|-user
| |
|  -user1
|		|
|		 -user2
|
|-data
| |
|  -data1
|	  |
|	   -data2
|

Директории user1 и user2 будут вложенными по отношению к директории user. Если мы поместим в директорию www файл .htaccess, то его действие будет автоматически распространяться и на директории user1 и user2.
В директорию data помещаем другой файл .htaccess, по-сравнению, с тем, что находится в директории user. И для директорий data1 и data2 будет действовать файл .htacсess, находящийся в data.
Теперь, в директорию user2 мы помещаем еще один файл .htaccess, который отличен от того, что находится в директории 2мя уровнями выше (это директория user). В итоге, настройки для директории user2 будут определяться только тем файлом .htaccess, который находится в этой директории.
Так как чаще всего Апач настроен так, что всегда ищет этот файл в директории, то .htaccess поможет вам быстро и без останова сервера произвести его перенастройку.




Синтаксис .htaccess

Вот обязательной синтаксис, несоблюдение которого приводит к ошибкам сервера:
- пути к файлам (директориям) указываются от корня сервера. Пример:
/opt/home/www.astanafoto.com/htdocs/config/.htpasswords

- домены с указанием протокола
Пример:
Redirect / http://www.site.ru

Файл имеет название именно "точка" htaccess
Должен быть записан в UNIX-формате. Для оболочки FAR, достигается F4 (редактирование файла), Shift+F2 (выбрать "сохранить как UNIX-текст").



Настройки сервера Apache для использования файла .htaccess

Для использования файла .htaccess для сервера Apache необходимо внести Вот обязательной синтаксис, несоблюдение которого приводит к ошибкам сервера:
- пути к файлам (директориям) указываются от корня сервера. Пример:
/opt/home/www.astanafoto.com/htdocs/config/.htpasswords

- домены с указанием протокола
Пример:
Redirect / http://www.site.ru

Файл имеет название именно "точка" htaccess
Должен быть записан в UNIX-формате. Для оболочки FAR, достигается F4 (редактирование файла), Shift+F2 (выбрать "сохранить как UNIX-текст").




Как запретить веб-посетителям читать файлы в директории?

Запрет на все файлы:
deny from all

Где 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 /pub/home/твой_логин/.htpasswd
require valid-user

Значение AuthName будет выводиться для посетителя и может использоваться для пояснения запроса авторизации. Значение AuthUserFILE указывает на место, где хранится файл с паролями для доступа к данной директории. Этот файл создается специальной утилитой htpasswd.exe.
Например в директории, которую защищаем паролем создаем такой .htaccess:
AuthName "For Registered Users Only"
AuthType Basic
AuthUserFILE /pub/site.ru/.htpasswd
require valid-user

В этом примере, посетитель при запросе директории, будет читать фразу "For Registered Users Only", файл с паролями для доступа должен лежать в директории /pub/site.ru/ и называться .htapasswd . Директория указывается от корня сервера, если вы неправильно зададите директорию, то Апач не сможет прочитать файл .htpasswd и никто не получит доступа к данной директории.

Пароль только на 1 файл:
Аналогично паролированию директории полностью, можно ставить пароль только на 1 файл.
Пример установки пароля на файл private.zip:
<FILES private.zip="">
AuthName "Users zone"
AuthType Basic
AuthUserFILE /pub/home/твой_логин/.htpasswd
</FILES>


Пароль на группу файлов:
Аналогично, используя
<FILES ?\.(inc|sql|...другие="" расширения...)$?="">
, можно ставить пароли по маске файлов.
Пример установки пароля на доступ ко всем файла с расширением "sql":
<FILES ?\.(sql)$?="">
AuthName "Users zone"
AuthType Basic
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 "/pub/home/login/htdocs/clousearea/.htpasswd"
<FILES *.*="">
require valid-user
</FILES>


файл .htaccess для каталога а2:
AuthName "Input password"
AuthType Basic
AuthUserFILE "/pub/home/login/htdocs/clousearea/.htpasswd"
<FILES *.*="">
require user юзвер1 юзвер2 юзвер3
</FILES>


файл .htaccess для каталога а3:
AuthName "Input password"
AuthType Basic
AuthUserFILE "/pub/home/абв/htdocs/clousearea/.htpasswd"
<FILES *.*="">
require user юзвер1 юзвер4 юзвер5
</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.php3 index.html index.htm




Как заставить Апач обрабатывать SSI директивы?
SSI позволяют "собирать" страницу из кусочков. В одном кусочке у вас код меню, в другом код верхней части страницы, в третьем - нижней. А посетитель видет обычную страницу, которая состоит из того кода, который входит в ваши кусочки.
Необходимы обязательные установки в httpd.conf:
В блоке, начинающемся с <DIRECTORY>и заканчивающийся </DIRECTORY>в строку Options Indexes добавьте Includes.
После, в файле .htaccess пишем:
AddHandler server-parsed .shtml .shtm .html .htm



Как заставить Апач выполнять php код в файлах с расширением отличным от php?
Иногда бывает полезно "обмануть" посетителя, выдавая ему свои php-скрипты или иные файлы, как html файлы. Реально используется для индексации поисковой системой Rambler php-скриптов.
Некоторые делаю мелкие фишки, вроде того, что дают фалам расширения совпадающие с какими-либо "знаковыми" именами. Например, на сайте www.osg.ru используются файлы с расширением osg: index.osg, script.osg и т.п.
Такие возможности достигаются простым пересопоставлением обработчика файлов:
RemoveHandler .html .htm
AddType application/x-httpd-php .php .htm .html .phtml

Заметьте, так как файлам с расширением .html и .htm сопоставлено, что это файлы с гипертекстовой разметкой, то мы первой строкой убираем это сопоставление и добавляем обработку таких файлов php интерпретатором.

Предположим, вы сменили платформу хостинга (NT to Unix), а у ваших посетителей остались точные закладки на ваши файлы. Тогда прописываем обработку .asp файлов, как php скриптов и уже в скрипте решаем, что делать с посетителем:
AddType application/x-httpd-php .php .asp

В отличие от примера выше, мы не пишем RemoveHandler ... , так как на Unix системах обычно с расширением .asp не сопоставлена ни одна программа.
При большой посещаемости сервера такие ухишрения могут вызвать тормоза. Спрашивайте у админа.

Как самому обрабатывать ошибки Апача?
Наиболее интересные и полезные ошибки Апача это: 401, 403-404, 500.
401 - Требуется авторизация (Authorization Required).
403 - пользователь не прошел аутентификацию, запрет на доступ (Forbided).
404 - запрашиваемый документ (файл, директория) не найден (Not Found).
500 - внутренняя ошибка сервера - к примеру, ошибка в синтаксисе файла .htaccess - (Internal Server Error).
Для того, что бы пользователю при этих ошибках были показаны ваши собственные сообщения об ошибках, в .htaccess пишем:
ErrorDocument 401 /errors/401.html
ErrorDocument 403 /errors/403.html
ErrorDocument 404 /errors/404.html
ErrorDocument 500 /errors/500.html

При этом при возникновении 401 ошибки пользователю загрузится файл errors/401.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 стоит указание файла с полным путем ( www.site.ru/error.php ), то $HTTP_SERVER_VARS['REQUEST_URI'] будет содержать этот файл, а не вызвавший ошибку.
В Internet Explorer 5.0 неправильно обрабатывается файл, вызывающийся при ошибке, если его размер меньше 1 килобайта. Будет вызвана стандартная страница IE 404.

Как поставить запрет на отображение содержимого директории при отсутствии индексного файла?
Предположим, что у вас вся графика, используемая на сайте находится в директории img. Посетитель может набрать в адресной строке браузера эту директорию и увидеть список всех ваших графических файлов. Конечно, это не нанесет вам урона, но можно и не дать такого просмотра посетителю. В .htaccess пишем:
Options -Indexes


Можно ли указать кодировку на все файлы, в которой по умолчанию получает документы браузер?
На заре интернета и зарождения браузеров, часто была ситуация, что браузер не мог автоматически определить, в какой из русских кодировок написан документ и в браузер выдавалась какая-то каша. Для избежания этого указываем, что все отдаваемые страницы будут иметь кодировку windows-1251:
AddDefaultCharset windows-1251


Можно ли указать кодировку на загружаемые файлы?
При загрузке файла на сервер (не важно кем - админом или посетителем), возможна перекодировка его - указываем, что все получаемые файлы будут иметь кодировку windows-1251:
CharsetSourceEnc windows-1251


Я закачиваю на сайт файл в одной кодировке, а Apache их перекодирует, как избавиться?
Акутально для "Русского Apache" [ http://apache.leha.ru ]
Вам необходимо отменить перекодировку сервером файлов. К примеру, отменяем перекодировку файла scriptName.php
<FILES scriptname.php="">
CharsetDisable On
</FILES>


Как применять различные кодировки для различных типов файлов?
Предположим, что вам необходимо установить кодировку windows-1251 на все файлы с расширением .htm и кодировку koi-8r на все файлы с расширением .htm:
AddType "application/x-httpd-php3; charset=windows-1251" .html
AddType "application/x-httpd-php3; charset=koi-8r" .htm


Создал файл .htaccess, но сервер выдает 500 ошибку - Internal Erorr
Ошибка синтаксиса или файл записан не в том формате. Проверьте синтаксис в своем файле с синтаксисом, указанным в данной статье.


Благодарности:
Гениальный опыт гениального комьюнити Karman.com.ua
http://hostforum.ru
http://phpdev.com
http://webhowto.ru/
Немножко копирайтов by pablo pablo@astanafoto.com
Автор книги "Лампа Аладдина" с инструкцией к применению (TOP 10 в рейтинге продаж)
0

#2 Пользователь офлайн   aforse 

  • Участник хостинг-жизни
  • Группа: Пользователь хостинга
  • Сообщений: 1
  • Регистрация: 14 февраля 10

Отправлено 14 февраля 2010 - 00:40

Есть Joomla 1.5.15 с каталогом Zoo

с такими настроками:
Включить SEO: Нет
Использовать mod_rewrite: Нет
Добавить суффикс к URL: Нет

Имеются ссылки:
http://site.com/index.php?Itemid=3&option=com_zoo&view=category&category_id=8
http://site.com/index.php?Itemid=3&option=com_zoo&view=category&category_id=11
http://site.com/index.php?Itemid=3&option=com_zoo&view=category&category_id=12
http://site.com/index.php?Itemid=3&option=com_zoo&view=category&category_id=9
http://site.com/index.php?Itemid=3&option=com_zoo&view=item&category_id=0&item_id=10


с такими настроками:
Включить SEO: Да
Использовать mod_rewrite: Да
Добавить суффикс к URL: Да

эти же ссылки имеют вид:
http://site.com/pc-programs/category/windows.html
http://site.com/pc-programs/category/win-os.html
http://site.com/pc-programs/category/win-network.html
http://site.com/pc-programs/category/nix.html
http://site.com/pc-programs/item/root/recuva-135.html


Подскажите, как с мопощью файла .htaccess ссылки преобразить в такой вид, если это возможно:
http://site.com/pc-programs/windows.html
http://site.com/pc-programs/windows/os.html
http://site.com/pc-programs/windows/network.html
http://site.com/pc-programs/nix.html
http://site.com/pc-programs/items/recuva-135.html

Сообщение отредактировал aforse: 14 февраля 2010 - 00:41

0

#3 Пользователь офлайн   nuclide 

  • Участник хостинг-жизни
  • Группа: Пользователь хостинга
  • Сообщений: 1
  • Регистрация: 10 мая 11

Отправлено 10 мая 2011 - 10:59

Почему такая конструкция работает. (т.е. при редиректе указаны адреса явно)
RewriteCond %{REQUEST_URI} \.(gif|png|jpg)$ [NC]
RewriteCond %{REQUEST_URI} !(_localdirectoryname/(.*))$ [NC]
RewriteRule  ^(.+)  /_localdirectoryname/$1  [L,NC]


А такая нет (в редиректе указываются созданные переменные, все остальные переменные окружения подставляются корректно)
Переменная создается точно. Т.к. содержимое видно в окружении.
SetEnvIfNoCase Host wild\.host\.com localdir=_localdirectoryname

RewriteCond %{REQUEST_URI} \.(gif|png|jpg)$ [NC]
RewriteCond %{REQUEST_URI} !(%{local_dir}/(.*))$ [NC]
RewriteRule  ^(.+)  /%{local_dir}/$1  [L,NC]


0

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей