Практические решения по использованию файла.htaccess. htaccess - Применение и синтаксис

Набирая адрес в строке браузера, вы получаете на свой компьютер файлы, которые отображает браузер. Управление тем, какие файлы и как вам показывать (пересылать) осуществляет веб-сервер . Наиболее популярных серверов два: IIS и .

Как и любая программа, веб-сервер имеет определенные настройки. Но, у вас, как пользователя Апача может (и скорее всего не будет, если говорить о виртуальном хостинге) прав менять конфигурацию Апача через его главные файлы, действие которых распространяется на всех пользователей этого сервера. Но, вы можете менять некоторые конфигурационные файлы, который распространяют свое действие только на ваш сайт. Один из таких файлов — .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.

Htaccess (с точкой в начале имени) – это файл, который дает возможность конфигурировать работу сервера в отдельных директориях (папках), не предоставляя доступа к главному конфигурационному файлу. Например, устанавливать права доступа к файлам в директории, менять названия индексных файлов, самостоятельно обрабатывать ошибки Apache, перенаправляя посетителей на специальные страницы ошибок.

Как известно, конфигурационные директивы сервера Apache находятся в файлe httpd.conf. Но далеко не всегда у Вас будут права доступа к этому файлу. Например, если Вы используете для хостинга виртуальный сервер, когда один сервер Apache обслуживает множество сайтов, то, естественно, Вам никто не позволит менять его конфигурацию. Но, тем не менее, вы можете конфигурировать работу сервера в своих директориях. И делать вы это можете с помощью файлов.htaccess.

Файл.htaccess может быть размещен в любом каталоге. Директивы этого файла действует на все файлы в текущем каталоге и во всех его подкаталогах (если эти директивы не переопределены директивами нижележащих файлов.htaccess).

Изменения, вносимые в файлы.htaccess, вступают в силу немедленно и не требуют перезагрузки сервера, в отличие от изменений, вносимых в главный конфигурационный файл httpd.conf.

Настройки httpd.conf, разрешающие применение файлов.htaccess

Для того, что бы эти файлы.htaccess можно было использовать - необходимы соответствующие настройки главного конфигурационного файла. В файле httpd.conf должны быть прописаны директивы, которые разрешат файлу.htaccess переопределять конфигурацию web-сервера в каталоге. Эта директива называется AllowOverride. Она может быть установлена как для всего сервера (глобально), так и для отдельного каталога.

Директива AllowOverride может включать в себя одну из следующих директив или их комбинацию: All, None, AuthConfig, FileInfo, Indexes, Limit, Options .

Для того чтобы дать директивам файлов.htaccess максимальные права следует прописать в httpd.conf:

AllowOverride All

Примечание

При желании название конфигурационного файла можно изменить, и например, назвать его не.htaccess, a access.conf. За название этого файла отвечает директива AccessFileName в файле httpd.conf. Но все же рекомендуется этого не делать.

Синтаксис.htaccess

Перед тем, как будут рассмотрены примеры, остановимся на синтаксисе директив в файлах.htaccess.

  • Пути к файлам и директориям должны указываться от корня сервера, например, /pub/home/server1/html/

Если вы не знаете путь от корня сервера, то Вы можете его узнать, спросив у администратора сервера, либо можете посмотреть сами, запустив на сайте функцию PHP - phpinfo(). Она выведет на экран конфигурацию PHP в виде фиолетовых таблиц. В них Вам необходимо найти переменную doc_root и посмотреть ее значение - это будет путь от корня сервера до Вашей основной директории.

  • В именах доменов обязательно должны быть указаны протоколы, например:

Примеры использования.htaccess

Глобальное перенаправление (редирект) на другой адрес:

Redirect / http://www.newsite.ru

Перенаправление (редирект) только при запросе определенных страниц:

Redirect /company http://www.newsite.com/newcompany
redirect /forum http://www.newsite.com/newforum

При запросе страниц из каталогов company и forum будет произведено перенаправление на новые адреса.

Перенаправление (редирект) только посетителей с определенным IP-адресом:

SetEnvIf REMOTE_ADDR 192.145.121.1 REDIR="redir"
RewriteCond %{REDIR} redir
RewriteRule ^/$ /only_for_you.html

Если посетитель имеет IP-адрес 192.145.121.1, то ему будет открыта страница only_for_you.html.

Изменение названия индексной страницы:

DirectoryIndex index.html index.php index.shtml

Можно указать несколько индексных страниц. При запросе каталога они будут искаться в том порядке, в котором перечислены в директиве DirectoryIndex. Если не будет найден файл index.html, то будет произведен поиск файла index.php и т.д.

Выполнять код PHP в файлах HTML

RemoveHandler .html .htm
AddType application/x-httpd-php .php .htm .html .phtml

Добавив эти строки в.htaccess вы дадите директиву серверу выполнять инструкции PHP не только в файлах с расширением *.php и *.phtml, но и в файлах с расширением *.htm и *.html.

Обработка ошибок Apache

ErrorDocument 401 /401.html
ErrorDocument 403 /403.html
ErrorDocument 404 /404.html
ErrorDocument 500 /500.html

При возникновении этих ошибок посетитель будет перенаправлен на специально созданные страницы.

  • 401 ошибка - Требуется авторизация (Authorization Required).
  • 403 ошибка - пользователь не прошел аутентификацию, доступ запрещен (Forbided).
  • 404 ошибка - Документ не найден (Not Found).
  • 500 ошибка - Внутренняя ошибка сервера (Internal Server Error).

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

Options –Indexes

Определение кодировки, в которой сервер "отдает" файлы

AddDefaultCharset windows-1251

Определение кодировки на загружаемые файлы

CharsetSourceEnc windows-1251

Запрет доступа ко всем файлам

Deny from all

Запрещен доступ ко всем файлам и каталогам в текущей директории.

Разрешить доступ только с определенного IP-адреса

Order deny,allow
deny from all
allow from 195.135.232.70

Строка order deny,allow определяет, в каком порядке следует выполнять директивы. Сначала выполняется директива запрета доступа, а затем разрешается доступ только для IP-адреса 195.135.232.70. Если в первой строке поменять порядок следования директив на order allow,deny, то доступ для данного IP-адреса не будет открыть, так как директива deny, выполняемая последней перекроет действия директивы allow.

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

Файл.htaccess предназначен для индивидуальной настройки сайтов и их каталогов. Он может содержать почти все инструкции, допустимые в файле httpd.conf (главный файл конфигурации сервера Апач). В отличие от httpd.conf, который должен лежать в каталоге /usr/local/etc/httpd/conf (а к нему имеет доступ только администратор сервера), файл.htaccess может лежать и, будет обрабатываться в любом каталоге сайта (если его обработка разрешена администратором сервера). В отличие от httpd.conf, настройки которого распространяются на всех пользователей сервера (владельцев сайтов), файл.htaccess вносит локальные изменения в настройки, влияя только на каталог его содержащий, вместе с вложенными в него каталогами. Файл.htaccess более глубокого вложения, переопределяет настройки аналогичного файла верхнего уровня, для своего каталога и тех, что в него вложены. Так, например, для каталога /www/, настройки задаются файлом /www/.htaccess, а для каталога /www/data/ - файлами /www/.htaccess и /www/data/.htaccess. Если в файле.htaccess нижнего уровня обнаружены те же инструкции, что и в.htaccess верхнего уровня (вероятно с иными параметрами), то выполняться будут именно они. Таким образом, образуется иерархическая структура правил, которые на нижнем уровне могут быть совершенно не такими как на верхнем (что-то мне это напоминает).

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

Синтаксис.htaccess

Вот обязательной синтаксис, несоблюдение которого приводит к ошибкам сервера:

  • Пути к файлам (директориям) указываются от корня сервера: /opt/home/www.astanafoto.com/htdocs/config/.htpasswords
  • Домены с указанием протокола: http://www.site.ru

Файл имеет название именно «точка»htaccess

Htaccess должен быть записан в UNIX-формате, то есть, перевод строки должен задаваться в нем одним символом (десятичный 10, шестнадцатиричный 0A), а не двумя (десятичный 13, шестнадцатиричный 0D + десятичный 10, шестнадцатиричный 0A), как в DOS или Windows. Для тех, кто работает из под Windows, полученный тексовой файл потребуется открыть в 16-ричном редакторе и запустить замену 0D на 20 (пробел в 16-ричном варианте). Есть и другие способы превращения Windows-файла в UNIX-формат.

Определение области действия директив, задаваемых в файле.htaccess

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

Блок Files

Блок Files ограничивает действие вложенных в него директив одним файлом, название которого указывается в открывающем теге блока:

ДИРЕКТИВЫ Блок FilesMatch

Блок FilesMatch ограничивает действие вложенных в него директив файлами, соответствующими шаблону, указываемому в открывающем теге блока:

ДИРЕКТИВЫ Блок IfModule

Блок IfModule ограничивает действие вложенных в него директив условием, что требуемые для их выполнения, модули загружены:

Этот блок позволяет избежать ошибочных ситуаций

ДИРЕКТИВЫ

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

ДИРЕКТИВЫ Блок IfDefine

Блок IfDefine выполняется только при условии, что требуемые для их выполнения, значения установлены:

Так же, как IfModule, этот блок позволяет избежать ошибочных ситуаций

ДИРЕКТИВЫ Директивы файла.htaccess

В файле.htaccess предусмотрено ни много директив, но и это «ни много», оказывается мощьнейшим инструментом настройки сервера в умелых рука.

Парольная защита с помощью файла.htaccess Пароль на директорию:

AuthName "Private zone"

require valid-user

Значение AuthName будет выводиться для посетителя и может использоваться для пояснения запроса авторизации. Значение AuthUserFile указывает на место, где хранится файл с паролями для доступа к данной директории. Этот файл создается специальной утилитой htpasswd.exe.

Например в директории, которую защищаем паролем создаем такой.htaccess:

AuthName "For Registered Users Only"

AuthUserFile /pub/site.ru/.htpasswd

require valid-user

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

Пароль только на 1 файл:

Аналогично паролированию директории полностью, можно ставить пароль только на 1 файл.

Пример установки пароля на файл private.zip:

AuthName "Users zone"

AuthUserFile /pub/home/твой_логин/.htpasswd

Пароль на группу файлов:

Аналогично, используя, можно ставить пароли по маске файлов.

Пример установки пароля на доступ ко всем файла с расширением "sql":

AuthName "Users zone"

AuthUserFile /pub/home/твой_логин/.htpasswd

Проверка прав доступа с помощью файла.htaccess

Задача: есть каталог a1 и в нем два вложенных каталога a2, a3, введено 2 уровня пользователей. 1 группа имеет доступ только к a1 и a2, 2-я ко всем трем каталогам. Необходимо проводить аутентификацию только 1 раз - при доступе к a1, но при этом соблюдать права на доступ к а2 и а3.

Ник и пароль запрашиваются только при входе на а1 - если у юзвера есть доступ на а2 пароль уже не запрашивается. Если на а3 доступа нет, вылетит табличка "введите пароль".

www.site.ru/a1/а2

www.site.ru/a1/a3

a1 - общий и вместе с тем закрытый. а2 и а3 только для отдельных личностей.

файл.htaccess для каталога а1:

AuthName "Input password"

require valid-user

файл.htaccess для каталога а2:

AuthName "Input password"

AuthUserFile "/pub/home/login/htdocs/clousearea/.htpasswd"

require user юзвер1 юзвер2 юзвер3

файл.htaccess для каталога а3:

AuthName "Input password"

AuthUserFile "/pub/home/абв/htdocs/clousearea/.htpasswd"

require user юзвер1 юзвер4 юзвер5

Перенаправление (редирект) посетителя с помощью файла.htaccess

Редирект на другой 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

Указание стартовой страницы с помощью файла.htaccess

Что бы поменять страницу, которая будет показываться при обращении к директории, пишем:

DirectoryIndex <нужная страница>

Можно указывать несколько страниц.

DirectoryIndex index.shtml index.html index.html3 index.html index.htm

Определение обработки SSI директив с помощью файла.htaccess

SSI позволяют "собирать" страницу из кусочков. В одном кусочке у вас код меню, в другом код верхней части страницы, в третьем - нижней. А посетитель видет обычную страницу, которая состоит из того кода, который входит в ваши кусочки.

Необходимы обязательные установки в httpd.conf:

В блоке, начинающемся с и заканчивающийся в строку Options Indexes добавьте Includes.

После, в файле.htaccess пишем:

AddHandler server-parsed .shtml .shtm .html .htm

Обработка в html-документах php-кода

Иногда бывает полезно "обмануть" посетителя, выдавая ему свои php-скрипты или иные файлы, как html файлы. Реально используется для индексации поисковой системой Rambler php-скриптов. Некоторые делаю мелкие фишки, вроде того, что дают файлам расширения совпадающие с какими-либо "знаковыми" именами. Например, на сайте http://www.wmaster.ru/WIND98/TEMP/Rar$EX00.001/www.osg.ru используются файлы с расширением osg: index.osg, script.osg и т.п.

RemoveHandler .html .htm

AddType application/x-httpd-php .php .htm .html .phtml

При большой посещаемости сервера может вызвать тормоза. Спрашивайте у админа.

Замена стандартных сообщений об ошибках сервера с помощью файла.htaccess

Наиболее интересные и полезные ошибки Апача это: 403-404, 500.

403 - пользователь не прошел аутентификацию, запрет на доступ (Forbided).

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´] будет содержать этот файл, а не вызвавший ошибку.

Величина страницы с ошибкой должна быть больше 511 байтов, иначе Internet Explorer может показать собственную страницу с описанием ошибки..

Больше информации о кодах ошибки http сервера можно посмотреть на «Коды ошибки http сервера»

Замена стандартных сообщений об ошибках сервера позволяет нормальным языком обьяснить посетителю что произошло. Примеры страниц для замены ошибок http сервера вы можете посмотреть в каталоге ошибок http сервера

Запрет просмотра каталога с помощью файла.htaccess

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

Options -Indexes

И наоборот, вы можете разрешить просмотр каталога, встроив его в стандартный интерфейс сайта директивой

Options +Indexes

Смотрите пример, как может выглядеть каталог примеров, использующихся основными страинцами сайта (возможно пример с сайта bosportour.com будет более очевидным). Описание директив для подобного отображения каталогов планируется поместить в полную докумнтацию по файлу.htaccess.

Определение кодировки по умолчанию с помощью файла.htaccess

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

AddDefaultCharset windows-1251

Определение кодировки на загружаемые файлы с помощью файла.htaccess

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

CharsetSourceEnc windows-1251

Вероятные ошибки в файле.htaccess

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

Смотрите синтаксис.htaccess.

Просмотрите файл error.log в корне своего сайта (если он там есть). Например строка:

W:/home/h15.ru/bospor/.htaccess: CustomLog not allowed here

Указывает на ошибку вфайле w:/home/h15.ru/bospor/.htaccess (http://bospor.h15.ru/.htaccess): Директива CustomLog не допустима здесь.

Начнем издалека, чтобы и новичкам был понятен принцип работы описываемого в статье файла. Для функционирования сайта в Интернете нужен не только компьютер и выход к сети, но и установленное на него специальное ПО, которое обеспечивает доступ к данным по протоколам http и https. Таким программным обеспечением и является веб-сервер. Существуют различные типы веб-серверов, но самый распространенный — Apache. Он построен на открытом коде, предоставляется бесплатно, постоянно дорабатывается и улучшается, совместим с многими скриптами и работает почти на всех платформах, включая Windows, Linux, Netware 5.x.

Настраивается Apache через конфигурационные файлы, которые хранятся в текстовом формате. С их помощью можно задать определенные правила действия веб-сервера. Главный конфигурационный файл называется httpd.conf или apache.conf (в зависимости от дистрибутива ОС). Во многих случаях все конфигурации сервера можно указывать именно здесь, и в основном такой способ предпочтительней, потому что:

А) уменьшает время ответа веб-сервера при запросе (так при каждом обращении к веб-серверу Apache не будет просматривать все каталоги на наличие.htaccess); б) некоторые директивы, например директивы модуля mod_rewrite, во многих отношениях работают лучше из главного конфигурационного файла.

Но доступ к этому файлу может быть не у всех пользователей сервера (например, в случае с виртуальным хостингом), поэтому остальным предлагается файл дополнительной конфигурации веб-сервера — .htaccess (c точкой в начале названия).

Что такое.htaccess и для чего он нужен

Файл (или файлы) .htaccess будет задавать правила работы веб-сервера только в каталоге, где он размещен, и его дочерних каталогах, без глобальных изменений работы всего сервера. Возможность использовать.htaccess прописывается директивой (т.е. командой) — AllowOverride — в главном конфигурационном файле httpd.conf, название которой прямо говорит о том, что настройки внутри.htaccess приоритетны перед настройками в httpd.conf (если иное не ограничено все той же директивой AllowOverride). С помощью этой директивы можно позволить все, а можно — только некоторые действия. Детальную инструкцию по его применению можно найти на сайте Apache.

С ней, при каждом обращении к веб-серверу, Apache будет просматривать все каталоги на наличие.htaccess. Изменения в файле действительны сразу после сохранения — перезагрузка всего веб-сервера не нужна (в отличие от изменений в httpd.conf).

Имя файла.htaccess — общепринятое, но вовсе не обязательное. В httpd.conf можно задать другое имя с помощью директивы AccessFileName , например, так:

AccessFileName .config

Как создать файл.htaccess

Как уже говорилось, конфигурационные файлы имеют текстовый формат, и создать.htaccess также можно с помощью текстового редактора (например, Блокнота или NotePad++ в Windows).

Имя файла — .htaccess (с точкой в начале);

тип — “Все файлы”;

формат переноса по словам;

режим ASCII (при загрузке.htaccess на хостинг по FTP-протоколу).

Apache — регистрозависимый веб-сервер, поэтому важно написать название маленькими буквами: .HTaccess и.htaccess — это разные файлы.

В Mac ОS файлы, начинающиеся с точки, невидимы. Поэтому Вы можете назвать его иначе и после, переместив по FTP на хостинг, переименовать. Обычно размещают файл в корневой директории веб-сервера (/public_html ) либо в корневой директории сайта (/public_html/site.com/ ).

Синтаксис.htaccess

Синтаксис.htaccess аналогичен синтаксису httpd. Для каждой директивы предполагается отдельная строка. Для своего же удобства, Вы можете вносить в файл комментарии с помощью знака #, и значение после # будет игнорироваться веб-сервером. Этот трюк можно использовать для отключения любой директивы. Ее не нужно удалять полностью из файла — достаточно просто закомментировать.

Возможности конфигурационного файла огромны. Ниже приведены базовые настройки в.htaccess.

Возможности.htaccess

Контроль доступа

Запрет веб-доступа:

Order Deny,Allow Deny from all

Запрет веб-доступа, кроме IP:

Order deny,allow deny from all allow from xxx.xxx.xxx.xxx

Запрет веб-доступа для IP:

Order allow,deny Allow from all Deny from xxx.xxx.xxx.xxx

Запрет доступа к файлу:

Order allow,deny Deny from all

Защита директории с помощью пароля:

AuthType Basic AuthName "Directory Name" AuthUserFile /home/cpanel_user/.htpasswds/public_html/smth/passwd require valid-user # где AuthName "Directory Name - имя защищенной директории, а # /home/cpanel_user/.htpasswds/public_html/smth/passwd - местонахождение файла с паролем.

Работа с ошибками веб-сервера

Иногда вместо ожидаемой страницы посетитель может натолкнуться на ответ веб-сервера в виде ошибки с лаконичным, но не всегда понятным для простого пользователя, объяснением причины. Полный список кодов состояния можно найти в Википедии . Для самых распространенных (например, 404 или 500 ошибки) желательно создать свою страницу, которая лучше смотрится и представляет посетителю пути выхода. Задается она следующим образом:

ErrorDocument 404 http://yourdomain.com/error/404.html # где http://yourdomain.com/error/404.html - путь к созданной странице.

P.S. Пользователи услуги от сайт могут воспользоваться для создания своей страницы функционалом контрольной панели cPanel (в разделе “Расширенный ” пункт “Страницы ошибок ”).

Настройка 301 редиректа в htaccess

Для создания постоянного перенаправления используется директива 301 редиректа, которая передает весь вес страницы на новый url (поэтому оно предпочтительней, чем 302 редирект — в целях SEO).

Перенаправление всего сайта на новый домен:

Redirect 301 / http://www.newdomain.com/

Перенаправление страницы на новую:

Redirect 301 /page1.html http://mydomain.com/page2.html

Модуль перенаправления mod rewrite

Незаменимым механизмом для изменения URL-ссылок “на лету” является модуль mod_rewrite . Его полезность, а вместе с тем, сложность заключается в том, что можно использовать несметное количество правил, включающих еще больше переменных.

Для работы модуля, прежде всего нужны директивы

RewriteEngine On (включает работу механизма преобразования)

Options FollowSymLinks (условие для работы mod_rewrite).

Если администратор сервера отключил данную опцию для директории пользователя, то невозможно использовать механизм преобразования. Такое ограничение накладывается на серверах виртуального хостинга в целях безопасности.

RewriteRule

Одной из самых функциональных директив модуля mod_rewrite является RewriteRule . Для того, чтобы указать условие, при котором будет работать правило, используется директива RewriteCond . Она (одна или несколько) обязательно прописывается перед RewriteRule.

Перенаправление страницы на новый домен:

RewriteRule ^page1\.html$ http://newdomain.com/

Перенаправление сайта с домена без www на домен с www:

RewriteEngine On RewriteCond %{HTTP_HOST} !^www\..* RewriteRule ^(.*) http://www.%{HTTP_HOST}/$1

И наоборот:

RewriteCond %{HTTP_HOST} ^www\.(.*)$ RewriteRule ^(.*)$ http://%1/$1

Перенаправление по протоколу HTTPS (предварительно нужно установить ):

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

Эти строки необходимо разместить в самом верху.htaccess.

Определение кодировки

Таблицу символов, в которой следует открыть сайт, определяет браузер. Однако, можно задать кодировку по умолчанию:

AddDefaultCharset UTF-8

Такое изменение распространяется в пределах действия.htaccess и на все страницы сайта. Можно задать кодировку для определенного типа файла, например windows-1251 для html:

AddType "application/x-httpd-php3; charset=windows-1251" .html

Часто сама страница несет в себе (а именно в заголовке) информацию об используемой кодировке. Нужно проверить, чтобы указанная кодировка в документе и в конфигурационном файле совпадали. Приведенная здесь utf-8 практически всегда требуется при работе популярных cms, так как они рассчитаны на большой круг пользователей по всему миру. Кстати, по умолчанию эта же кодировка настроена и на наших серверах виртуального хостинга.

Другие возможности

— Определить индексный файл сайта:

По умолчанию, индексной страницей считается index.html . С помощью следующей директивы можно задать другое название файла, который отрывается первым при обращении к каталогу:

DirectoryIndex index.php

— Полезной директивой является FilesMatch, которая оговаривает пределы действия правила по названию файла, используя регулярные выражения. С ее помощью, например, можно запретить доступ к определенным файлам:

Order Allow,Deny Deny from all

Есть некоторые директивы, которые не поддерживаются на наших серверах с виртуальным хостингом, но вы можете их разрешить на своем ВПС, например.

Причина в том, что работающий как suPHP веб-сервер не поддерживает php_flag и php_value . Поэтому, мы предлагаем использовать сPanel (крайне полезен подраздел “Выбор версии РНР ”, для работы с error_log — “Журнал ошибок ”) или создать локальный файл php.ini для этой цели. Пару директив мы все-таки привели ниже:

— Для того, чтобы избежать зависания веб-сервера при обработке некорректно написанных скриптов, существует max_execution_time . С ее помощью указывается время в секундах, отведенное на обработку РНР-скрипта. Можно увеличить время ожидания веб-сервера при выполнении скрипта:

Php_value max_execution_time 60

— Определить максимальный размер загружаемого файла:

Php_value upload_max_filesize 128M (здесь вместо 128 поставьте нужное значение).

— Вывести ошибки РНР в отдельный файл:

Php_flag log_errors on php_value error_log /home/path/to/public_html/domain/PHP_errors.log # PHP_errors.log - название файла, а # /home/path/to/public_html/domain - путь к нему).

P.S. На виртуальном хостинге трудно с точностью определить, какие директивы будут работать в.htaccess, потому что многие из тех, которые ведут к изменению конфигурации веб-сервера, запрещены по понятным причинам — эти изменения затронут всех пользователей на носителе.

Если.htaccess не работает

Проверить работу файла можно, прописав несложные директивы, которые при правильном синтаксисе и верных настройках httpd (как описывалось в начале статьи) должны сработать:

— например, запретив доступ к сайту извне с помощью директивы

Order deny,allow Deny from all

— или записав в файл набор бессмысленных символов, которые не являются директивами. Если веб-сервер взаимодействует с htaccess, то он, конечно, не сможет их прочитать и отдаст 500 ошибку.

Если проблема действительно существует, нужно в первую очередь искать причину в главном конфигурационном файле:

— убедиться, что сервер разрешает использование файла.htaccess: есть запись AllowOverride All (и она не закомментирована с помощью #);

— проверить, что создана запись VirtualHost для домена. В качестве примера:

DocumentRoot /www/example1 ServerName www.example.com # Другие директивы

— название файла дополнительной конфигурации указано как Вам нужно. Если это.htaccess, то:

AccessFileName .htaccess

— присутствует хостнейм сервера (указывается при создании URL-перенаправлений) в виде IP-адреса сервера или домена:

ServerName www.example.com

Если же причина не в httpd, нужно проверить сам.htaccess на наличие синтаксических ошибок. Можно воспользоваться онлайн-сервисами (например, http://www.htaccesscheck.com/ , http://htaccess.madewithlove.be/), или — , где есть полный перечень директив, вместе с синтаксисом.

Крайне желательно перед любым редактированием делать резервную копию файла — чтобы при худшем исходе можно было “откатить” изменения обратно.

Хотя изменения и сразу вступают в силу, кэш браузера никто не отменял — для проверки работы сайта после редактирования.htaccess, регулярно пользуйтесь его очисткой или загружайте страницу в обход кэша — через комбинацию клавиш Ctrl + F5 (в Safari: Ctrl + R , в Mac OS: Cmd + R ).

Самая распространенная ошибка веб-сервера при работе с.htaccess — 500, и либо она указывает на проблему в синтаксисе (опечатка в директиве, например), либо же в главном конфигурационном файле не разрешен такой тип директивы.

Полезные ссылки

Лучший источник вдохновения для работы с.htaccess:

Многие инструкции по работе с.htacess, на русском.



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: