Этот таинственный файл.htaccess. Перенаправление посетителя при запросе определенных страниц
В предыдущей статье мы с Вами рассмотрели применение CSS свойств границы () элементов страницы. И я обещал Вам, что расскажу о том, как использовать для прорисовки границ — картинки. Об этом и пойдет сегодня речь.
Чтобы использовать изображения для построения границ будем использовать CSS cвойство border-image.
Толщина границ задается свойством , при этом если указано border: 0, то рамка не выводится. При других значениях border рисунок всегда имеет приоритет. Фон, если он задан через свойство background, отображается под рамкой.
Синтаксис кода
Давайте разберем пример записи свойства:
border-image: url (images/bg-image.png ) 30 round round; |
url (images/bg-image.png) — адрес фоновой картинки.
30 — может быть одно, два, три или четыре значения, которые указывают размеры частей изображения в пикселах, задавая тем самым области деления картинки. Сами единицы не пишутся, только число (10, а не 10px). На рисунке красными линиями выделены необходимые для создания рамки области.
Разрешается использовать одно, два, три или четыре значения, разделяя их между собой пробелом. Эффект зависит от количества значений и приведен в таблице.
round round — два параметра (для горизонтальных и вертикальных границ соответственно). Могут принимать одно из трех значений. Результат можно увидеть на картинках.
stretch
— Растягивает рисунок границы до размеров элемента. Это значение используется по умолчанию.
repeat
— Повторяет рисунок границы.
round
— Повторяет рисунок и масштабирует его так, чтобы на стороне элемента оказалось целое число изображений.
Совместимость с браузерами
К сожалению, не все версии браузеров поддерживают свойство border-image. Для лучшей совместимости желательно прописать свойство для всех браузеров.
Пример кода:
border-style : solid ; border-width : 27px ; -moz-border-image: url (http://mysite.ru/border.png ) 27 round stretch; -webkit-border-image: url (http://mysite.ru/border.png ) 27 round stretch; -o-border-image: url (http://mysite.ru/border.png ) 27 round stretch; border-image: url (http://mysite.ru/border.png ) 27 round stretch; |
Автоматизация
В сети есть инструменты, которые оказывают нам помощь в написании кода. Для свойства border-image есть очень удобный конструктор . Вы просто загружаете туда свою картинку границы (кстати, их очень много можно найти в инете). При помощи ползунков делите картинку на области, задаете толщину границ и параметры повторения.
Причем, сразу же, в онлайн режиме видите результат (то, что получится в итоге).
Когда добиваетесь неодходимого результата, Вам остается только скопировать сгенерированный код и вставить его в код страницы (файла css).
Очень просто и удобно.
Заключение
На этом мы заканчиваем рассмотрение свойств границ в CSS. Я с Вами не прощаюсь. В ближайшее время мы продолжим обучение верстке. Подписывайтесь на обновления ... и... До встречи!
Apache
- самый распространённый HTTP-сервер
. Распространяется бесплатно,
включая исходные тексты.
Поддерживаются сценарии на CGI
(включая FastCGI
), PHP
, Perl
, Java
. Аутентификация
- базовая
, message-digest
, TLS
(SSL)
. С апреля 1996 это самый популярный HTTP-сервер
в Интернете,
в августе 2007 года он работал на 51% всех веб-серверов.
.htaccess
- файл дополнительной конфигурации веб-сервера Apache
, а также подобных ему серверов.
Позволяет задавать большое
количество дополнительных параметров и разрешений для работы веб-сервера у отдельных пользователей (а также на
различных папках отдельных пользователей),
таких как управляемый доступ к каталогам
, переназначение типов файлов
и т.д., не предоставляя доступа
к главному
конфигурационному файлу, т.е. не влияя на
работу всего сервиса целиком.
.htaccess является подобием httpd.conf с той разницей, что действует только на каталог, в котором располагается, и на его дочерние каталоги. Возможность использования .htaccess присутствует в любом каталоге пользователя.
Файл .htaccess может быть размещен в любом каталоге сайта. Директивы этого файла действуют на все файлы в текущем каталоге и во всех его подкаталогах (если эти директивы не переопределены директивами нижележащих файлов .htaccess ).
Директивы .htaccess
предоставляют пользователю широкий выбор возможностей по настройке своего сайта,
среди которых:
|
Список всех доступных директив можно посмотреть .
Описываются предпочтения клиента относительно типа документа.
IP-адрес посетителя.
Адрес посетителя в нормальной форме - например, rt99.net.ru
.
Имя удаленного пользователя. Имеет формат имя.хост, например, kondr.www.rtt99.net.ru
Тоже, что и REMOTE_IDENT, но содержит только имя. Пример: kondr
Позволяет определить тип запроса (GET или POST). Должен обязательно анализироваться, т.к.
определяет дальнейший способ обработки информации.
Полный путь к веб-странице на сервере.
Содержит в себе все, что передавалось в скрипт.
Содержит строчку, переданную в качестве запроса при вызове CGI
скрипта.
Используется для идентификации пользователя
Cодержит путь к корневой директории сервера.
Почтовый адрес владельца сервера, указанный при установке.
IP-адрес вашего сайта.
Порт, на котором работает Apache.
Версия HTTP
протокола.
Название сервера, например, Apache/1.3.2 (Unix)
TIME_MON
TIME_DAY
TIME_HOUR
TIME_MIN
TIME_SEC
TIME_WDAY
TIME
Переменные, предназначеные для работы со временем в разных форматах.
Это версия API
модуля Apache
(внутренний интерфейс между сервером и модулем) в
текущей сборке сервера, что определено в include/ap_mmn.h
.
Полная строка HTTP
-запроса, отправленная браузером серверу (т.е., «GET /index.html
HTTP/1.1»
).
Она не включает какие-либо дополнительные заголовки отправляемые браузером.
Ресурс, запрошенный в строке HTTP-запроса.
Полный путь в файловой системе сервера к файлу или скрипту, соответствующему этому запросу.
Условие - это шаблон условия, т.е. какое-либо регулярное выражение, применяемое к текущему экземпляру
"Сравниваемая Строка", т.е. "Сравниваемая Строка" просматривается на поиск соответствия Условию.
Помните, что Условие это perl
-совместимое регулярное выражение с некоторыми дополнениями:
Все эти проверки также могут быть предварены префиксом восклицательный знак ("!") для инвертирования их значения.
RewriteEngine
включает или выключает работу механизма преобразования. Если она установлена в положение
off
, этот модуль совсем не работает.
Заметьте, что по умолчанию настройки преобразований не наследуются. Это означает, что вы должны иметь RewriteEngine
on директиву для каждого
виртуального хоста, в котором вы хотите использовать этот модуль.
Синтаксис RewriteEngine
выглядит следующим образом:
Используйте для комбинирования условий в правилах OR
вместо AND
. Типичный пример - перенаправление
запросов на поддомены в отдельные каталоги.
Для выдачи разных сайтов для разных браузеров, согласно «User-Agent:»
заголовку запроса,
Вы можете использовать следующие директивы:
В подстановке вы можете использовать, в том числе, и специальные флаги путем добавления в качестве третьего аргумента директивы RewriteRule . Флаги - это разделённый запятыми следующий список флагов:
"redirect|R [=code]"
(вызывает редирект)
Префикс в Подстановке вида http://thishost[:thisport]/
(создающий новый URL
из какого-либо
URI
)
запускает внешний редирект (перенаправление). Если нет никакого кода, в подстановке ответ будет со
HTTP
статусом 302 (ВРЕМЕННО ПЕРЕМЕЩЕН). Для остановки процесса преобразования
вам также нужно написать флаг "L"
.
"forbidden|F [=code]"
(делает URL запрещенным)
Это делает текущий URL
запрещённым, например, клиенту немедленно отправляется ответ
с HTTP
статусом 403 (ЗАПРЕЩЕНО). Используйте этот флаг в сочетании с соответствующими
RewriteConds
для блокирования URL
по некоторым критериям.
"gone|G [=code]"
(делает URL «мёртвым»)
Этот флаг делает текущий URL
«мертвым», т.е., немедленно отправляется HTTP
ответ
со статусом 410 (GONE
). Используйте этот флаг для маркировки «мертвыми» несуществующие более
страницы.
"proxy|P [=code]"
(вызвает прокси)
Этот флаг помечает подстановочную часть как внутренний запрос прокси и немедленно
(т.е. процесс преобразования здесь останавливается) пропускает его через прокси-модуль.
Используйте этот флаг для того, чтобы добиться более мощной реализации директивы ProxyPass
,
интегрирующей некоторое содержимое на удаленных серверах в пространство имён локального сервера.
"last|L [=code]"
(последнее правило)
Остановить процесс преобразования на этом месте и не применять больше никаких
правил преобразований. Используйте этот флаг для того, чтобы не преобразовывать
текущий URL
другими, следующими за этим, правилами преобразований.
"next|N [=code]"
(следуюший раунд)
Перезапустить процесс преобразований (начав с первого правила). В этом случае URL
снова
сопоставляется неким условиям, но не оригинальный URL
, а URL
вышедший из последнего
правила преобразования. Используйте этот флаг для перезапуска процесса преобразований, т.е.
безусловному переходу на начало цикла.
"chain|C [=code]"
(связь со следующим правилом)
Этот флаг связывает текущее правило со следующим (которое, в свою очередь, может
быть связано со следующим за ним, и т.д.). Это имеет следующий эффект: если есть
соответствие правилу, процесс продолжается как обычно, т.е. флаг не производит
никакого эффекта. Если правило не соответствует условию, все следующие, связанные
правила, пропускаются.
"type|T=MIME-тип [=code]"
(принудительно установить MIME тип)
Принудительно установить MIME-тип
целевого файла в MIME-тип
. К примеру, это можно
использовать для имитации mod_alias
директивы ScriptAlias
, которая принудительно
устанавливает для всех файлов внутри отображаемого каталога MIME
тип
равный «application/x-httpd-cgi»
.
"nosubreq|NS [=code]"
(используется только в случае не внутреннего подзапроса)
Этот флаг дает команду механизму преобразований пропустить директиву, если текущий подзапрос
является внутренним подзапросом. К примеру, внутренние подзапросы в Apache
происходят тогда,
когда mod_include пытается получить информацию о возможных файлах по умолчанию для каталогов
(index.xxx). При подзапросах это не всегда полезно и даже иногда вызывает проблему в работе
набора директив преобразований. Используйте этот флаг для исключения некоторых правил.
"nocase|NC [=code]"
(не учитывать регистр)
Это делает Шаблон нечувствительным к регистру, т.е. нет различий между "A-Z" и "a-z",
когда Шаблон применяется к текущему URL
.
"qsappend|QSA [=code]"
(добавлять строку запроса)
Этот флаг указывает механизму преобразований на добавление, а не замену,
строки запроса из URL
к существующей, в строке подстановки. Используйте
это когда вы хотите добавлять дополнительные данные в строку запроса с
помощью директив преобразований.
"noescape|NE [=code]"
Этот флаг не даёт mod_rewrite
применять обычные правила экранирования URI
к результату
преобразования.
Обычно, специальные символы (такие как "%", "$", ";", и так далее) будут экранированы их шестнадцатиричными
подстановками ("%25", "%24", и "%3B", соответственно); этот флаг не дает это делать.
(не экранировать URI при выводе)
Если в подкаталогах в .htaccess нет ни одной директивы модуля mod_rewrite , то все правила преобразования наследуются из родительского каталога.
При наличии в файле .htaccess каких-либо директив модуля mod_rewrite не наследуется ничего, а состояние по умолчанию выставляется таким же, как в главном конфигурационном файле веб-сервера (по умолчанию "off"). Поэтому, если нужны правила преобразования для конкретного каталога, то нужно еще раз вставить директиву "RewriteEngine on " в .htaccess для конкретного каталога.
При наследовании правил из верхних каталогов и добавлении к ним новых свойственных только данному каталогу - необходимо выставить в начале следующее: "RewriteEngine on " и "RewriteOptions inherit " - последняя директива сообщает серверу о продолжении.
Примеры использования mod_rewrite можно посмотреть
Если у Вас установлена операционная система семейства Windows , Вы можете подключится к серверу по SSH (инструкцию по подключению можно найти ) и воспользоваться утилитой htpasswd .
Запустив htpasswd
без параметров мы увидим:
beget@ginger
~ #
htpasswd Usage: htpasswd [-cmdps] passwordfile username htpasswd -b passwordfile username password -c Create a new file. beget@ginger ~ # |
Здесь не будут рассматриваться все параметры этой команды, но вы можете сами прочитать подробности, запустив htpasswd в unix shell , или ознакомившись с соответствующей страницей документации по Apache.
Итак, изначально у нас еще нет файла с паролями и нам нужно его создать:
А теперь мы хотим добавить еще одного пользователя. Так как файл с паролями у нас уже есть,
мы просто не будем использовать ключ "-c" :
Указывая valid-user , Вы разрешаете доступ всем пользователям, перечисленным в файле паролей.
Приведем пример для доступа определенных пользователей из файла с паролями .htpasswd
|
Следует помнить, что при таком ограничении доступа пароли передаются по каналам связи в открытом виде и при определенных обстоятельствах могут быть перехвачены злоумышленниками. Поэтому в целях безопасности рекомендуется организовывать доступ к закрытым областям веб-сайта через защищенное SSL-соединение .
Для того, что бы.htaccess можно было использовать — необходимы соответствующие настройки главного конфигурационного файла Apache -
httpd.conf
.
AllowOverride
. Она может быть установлена как для всего сервера (глобально), так и для отдельного каталога.
Директива AllowOverride может включать в себя одну из следующих директив или их комбинацию: All, None, AuthConfig, FileInfo, Indexes, Limit, Options .
AllowOverride All
Синтаксис.htaccess
redirect /company http://www.newsite.com/newcompany
redirect /forum http://www.newsite.com/newforum
SetEnvIf REMOTE_ADDR 192.145.121.1 REDIR= "redir"
RewriteCond %{REDIR} redir
RewriteRule ^/$ /only_for_you.html
DirectoryIndex index.html index.php inde x.shtml
RemoveHandler .html .htm
AddType application/x-httpd-php .php .ht m .html .phtml
Обработка ошибок Apache
ErrorDocument 401 /401.html
ErrorDocument 403 /403.html
ErrorDocument 404 /404.html
ErrorDocument 500 /500.html
Options -Indexes
AddDefaultCharset windows-1251
CharsetSourceEnc windows-1251
Запрет доступа ко всем файлам
deny from all
order deny,allow
deny from all
allow from 195.135.232.70
deny from 195.135.232.70
[Error:
Irreparable invalid markup ("
Для того, что бы.htaccess можно было использовать — необходимы соответствующие настройки главного конфигурационного файла Apache - httpd.conf.
В файле httpd.conf должны быть прописаны директивы, которые разрешат файлу.htaccess переопределять конфигурацию web-сервера в каталоге. Эта директива называется AllowOverride. Она может быть установлена как для всего сервера (глобально), так и для отдельного каталога.
Директива AllowOverride может включать в себя одну из следующих директив или их комбинацию: All, None, AuthConfig, FileInfo, Indexes, Limit, Options
.
Для того чтобы дать директивам файлов.htaccess максимальные права следует прописать в httpd.conf:
AllowOverride All
Синтаксис.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.
Запретить доступ с определенного IP-адреса
deny from 195.135.232.70
Запретить доступ к определенному файлу
deny from all
Запрещен доступ посетителей к файлам config.php. Этот запрет не действует на скрипты web-сервера. Они по прежнему будут иметь доступ к этому файлу.
Запретить доступ к файлам с определенным расширением
Здесь запрещен доступ к файлам с расширением *.conf. Директива
? - любой одиночный символ
* - любая последовательность символов, исключая символ / (слеш)
Запретить доступа к файлам с несколькими типа расширений
Запрещен доступ к файлам с расширением *.inc, *.conf и *.cfg. Хотя директива
[тильда] [пробел] [далее_все_без_пробелов]
Установка пароля на директорию
AuthName "Admin page"
AuthType Basic
AuthUserFile /pub/home/server/.pass
require valid-user
Начнем издалека, чтобы и новичкам был понятен принцип работы описываемого в статье файла. Для функционирования сайта в Интернете нужен не только компьютер и выход к сети, но и установленное на него специальное ПО, которое обеспечивает доступ к данным по протоколам 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
Запрет доступа к файлу:
Защита директории с помощью пароля:
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, которая оговаривает пределы действия правила по названию файла, используя регулярные выражения. С ее помощью, например, можно запретить доступ к определенным файлам:
Есть некоторые директивы, которые не поддерживаются на наших серверах с виртуальным хостингом, но вы можете их разрешить на своем ВПС, например.
Причина в том, что работающий как 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 для домена. В качестве примера:
— название файла дополнительной конфигурации указано как Вам нужно. Если это.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, на русском.