Сейчас для организации работы подавляющего большинства сайтов в сети используется веб-сервер Apache. Он немного отстает в производительности, но зато очень прост в настройке и имеет огромное количество возможностей.
Веб-сервер Apache можно настраивать не только в главном конфигурационном файле, но и через файлы.htaccess. Эти файлы размещаются в определенных папках и указывают веб-серверу как нужно себя вести в этой папке и ее подкаталогах.
Настройка файла htaccess очень похожа на настройку главного файла конфигурации Apache. Но она немного отличается. С помощью этого файла вы можете настроить редиректы, внутреннее изменение url, права доступа, авторизацию по паролю и многое другое. В сегодняшней статье мы рассмотрим как правильно настроить htaccess для вашего сервера.
Мы уже начали тему в одной из предыдущих статей, но сегодня немного освежим информацию и рассмотрим более детально именно настройку htaccess.
Все директивы из файла htaccess выполняются точно так же, как если бы они были размещены в глобальном конфигурационном файле, только внутри директивы
Общий синтаксис директив очень прост, это пары команд и их опций, разделенных пробелом, например:
Команда параметр1 параметр2 флаги
Самих команд достаточно много и мы будем рассматривать их на примерах действий, которые они выполняют. Кроме самих команд, тут могут использоваться вложенные структуры, например, для активации модулей или проверки доступности того или иного модуля. А теперь давайте перейдем ближе к тому как выполняется правильная настройка htaccess. Начнем с самых простых действий.
Довольно часто htaccess используется для управления доступом к папке. Для управления доступом используются три команды:
Сначала, с помощью опции order, нужно указать в каком порядке будут выполняться директивы, значение имеет только эта команда, и неважно в какой последовательности они расположены в файле.
Затем с помощью директивы allow или deny мы разрешаем или запрещаем доступ к папке с определенных адресов. Например, чтобы запретить все необходимо добавить в htaccess:
Order deny,allow
Deny from all
Но мы также можем разрешить доступ только с локальной сети:
Order deny,allow
Deny from all
Allow 192.168.0.
Если указано deny,allow, то проверка будет выполняться в таком порядке. Сначала все директивы deny, затем все директивы allow, и если ни одно из условий не подошло, то запрос пропускается.При allow,deny такой запрос будет по умолчанию отклонен. Например, предыдущий пример можно написать так:
Order allow,deny
Allow 192.168.0.
Наиболее часто htaccess используется для модификации URL во время выполнения или редиректов. За эту функциональность отвечает модуль mod_rewrite и обычно он активирован в большинстве конфигураций Apache.
Модификация URL в htacces выполняется с помощью трех директив, это RewriteBase , которая указывает префикс адреса, RewriteCond проверяет соответствие, и RewriteRule - изменяет URL в соответствии с регулярным выражением если все правила соответствия подходят.
Сначала нужно включить Mod_Rewrite, на случай если модуль еще не активен:
RewriteEngine on
Укажем, что в качестве префикса для URL нужно использовать корень:
И будем автоматически заменять URL адреса с index.html на index.php, обратите внимание, что исходный URL - это путь к запрашиваемому файлу относительно расположения файла htaccess:
RewriteRule index.html /index.php
Для более эффективной замены можно использовать регулярные выражения они состоят из специальных символов и переменных и обычных символов и цифр. Рассмотрим основные специальные символы:
В регулярных выражениях htaccess также можно использовать переменные с данными, полученными из заголовков запроса, например:
Это наиболее часто используемые переменные, но их есть намного больше, остальные вы можете найти в официальной документации . Регулярные выражения открывают более широкие возможности, например, вы можете заменять во всех страницах html на php:
RewriteEngine On;
RewriteBase /;
Директива RewriteCond дает еще больше гибкости, вы можете выбрать к каким адресам стоит применять модификацию, например, будем переопределять данные только для версии с www:
RewriteBase /;
RewriteCond % {HTTP_HOST} ^www.site.ru$
RewriteRule ^(.*)\.html$ $1.php
Таким образом, вы можете выполнять любые преобразования ваших URL без фактических редиректов куда-либо. Но дальше мы рассмотрим как делать редиректы.
Настройка редиректов htaccess выполняется похожим образом, с помощью того же самого модуля mod_rewrite, только теперь вместо модификации url мы указываем флаг с нужным действием и кодом редиректа.
Самый простой редирект можно выполнить без mod_rewrite, с помощью такой строки:
Redirect 301 /index.html http://www.site.ru/index.php
Но обычно нужны перенаправления с более широким действием. Все выглядит очень похоже, только теперь мы используем флаг чтобы не учитывать регистр, [L] для прекращения обработки и [R] - для редиректа. Например, перенаправление htaccess с версии без www на домен с www:
RewriteCond %{HTTP_HOST} ^site\.ru$
RewriteRule ^(.*)$ http://www.site.ru/$1
Значение R=301 означает код редиректа, который будет возвращен клиенту, можно использовать 301, 302 и т д. Редирект htaccess с домена www на домен без префикса будет выглядеть так:
RewriteCond %{HTTP_HOST} ^www.site\.ru$
RewriteRule ^(.*)$ http://site.ru/$1
Таким же образом можно сделать переадресацию:
RewriteRule ^старый_адрес /новый_адрес/$1
Редирект с http версии на https:
RewriteCond %{SERVER_PORT} ^80$
RewriteCond %{HTTP} =on
RewriteRule ^(.*)$ https://site.ru/$1
При возникновении каких-либо ошибок во время генерации страницы, веб-сервер выдает краткое сообщение и код ошибки. Но пользователям будет намного понятнее в чем дело, если вы сделаете для каждой ошибки отдельную страницу с картинками и полноценным объяснением.
Настройка htaccess для этого пункта будет очень полезной. Вы можете использовать директиву ErrorDocument. С помощью нее можно задать html страницы для ошибок 4хх и 5хх. Например, для 404:
ErrorDocument 404 http://site.ru/error/404.shtml
ErrorDocument 403 http://site.ru/error/403.shtml
ErrorDocument 401 http://site.ru/error/401.shtml
ErrorDocument 500 http://site.ru/error/500.shtml
Браузер позволяет хранить в своем кэше изображения, файлы скриптов, стилей и другие медиафайлы определенное время. Время жизни кэша задается веб-сервером с помощью специальных заголовков. Их можно настроить с помощью модуля expires.
Сначала активируем модуль и устанавливаем период кэширования по умолчанию:
ExpiresActive On
ExpiresDefault "access plus 1 month"
Теперь мы можем настроить кэширование для каждого mime типа файлов:
ExpiresByType text/html "access plus 1 month 15 days 2 hours"
ExpiresByType image/gif "access plus 5 hours 3 minutes"
ExpiresByType image/x-icon "access plus 2592000 seconds"
В первой строке мы указываем, что страницы html нужно считать годными на один месяц 15 дней и два часа с момента загрузки. Доступны такие типы файлов:
Чтобы быть уверенным что эта конструкция не вызовет ошибок заключите ее в if:
Для сжатия в Apache можно использовать модуль deflate. Здесь достаточно просто перечислить mime типы файлов, которые нужно сжать. Например:
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript
Вы также можете заключить конструкцию if, чтобы проверить поддерживается ли этот модуль:
В этой статье мы рассмотрели как выполняется настройка файла htaccess для правильной работы вашего сайта. Все действия выполняются не так уже и сложно. Достаточно скопировать несколько строк и исправить их под свои нужды. Если у вас остались вопросы, спрашивайте в комментариях!
На завершение предлагаю видео с обзором конфигурационного файла Apache:
Файл.htaccess (англ. hypertext access) используется для простой и удобной настройки веб-сервера на котором хранится сайт пользователя. Соответственно меняя настройку веб-сервера, мы сможем поменять работу сайта. Как правило, файл.htaccess находится в корневом каталоге, а его действие распространяется на весь сайт и на все подкаталоги. Если же в другом каталоге содержится свой.htaccess, то он будет действовать только на свой каталог и подкаталоги.
Важно! Изменяя файл.htaccess можно очень нарушить работу сайта, а также необдуманные действия с ним могут не иметь видимых последствий, но повлечь за собой снижение позиций в поисковых системах, либо полную их потерю. Поэтому мы рекомендуем перед любыми изменениями файла сохранять его копию, чтобы иметь возможность вернуть прежние настройки.
Обычно он располагается в коневом каталоге сайта. Иногда, в различных CMS может находится файл htaccess.txt, который никак не воспринимается сервером и ни на что не влияет. Чтобы он начал работать нужно его переименовать в.htaccess. Если это не получится сделать на вашем компьютере, то зайдите на свой сервер через FTP-клиент, и переименуйте файл прямо сервере.
Редактировать файл на компьютере можно с помощью любого текстового редактора, но чтобы избежать возможных проблем с кодировкой мы рекомендуем использовать для этого Notepad++ .
Все просто, напишите в первой строчке этого файла любое слово (например YAROBOT), сохраните файл и замените им находящийся на сервере. Если сайт продолжит работать, то.htaccess в данный момент не работает. Если же появится ошибка 500 Internal Server Error, то это значит, что веб-сервер не смог понять команду (YAROBOT) и выдал ошибку. Этот факт подтвердит, что работа.htaccess на сервере поддерживается и включена в данный момент. Чтобы вернуть сайту работоспособность удалите строчку с YAROBOT.
Важно! Если вы хотите, чтобы ваш редирект работал, нужно перед строками, которые рекомендуются ниже по тексту, обязательно прописать
Для этого в файл.htaccess вносим следующие строки:
Redirect 301 /старая-страница.html http://сайт.рф/новая-страница.htmlRedirectPermanent /старая-страница.html http://сайт.рф/новая-страница.html
Например перенаправление с http://www.site.com на http://site.com. Это очень полезная вещь, часто используется в СЕО
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.domain\.com$
RewriteRule ^(.*)$ http://domain.com/$1
Перенаправление с http://site.com на http://www.site.com (не советуем использовать)
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain\.com$
RewriteRule ^(.*)$ http://www.domain.com/$1
Redirect 301 / http://newsite.com/
Чтобы при вводе site.com/page или site.com/page/ происходило перенаправление на site.com/page.html пишем в.htaccess следующее:
RewriteCond %{REQUEST_URI} (.*/[^/.]+)($|\?)
RewriteRule .* %1.html
RewriteRule ^(.*)/$ /$1.html
Обратный редирект с site.com/page.html на site.com/page
RewriteBase /
RewriteRule (.*)\.html$ $1
Например было site.com/page/, стало site.com/page
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ /$1
Перенаправление всех страниц одного раздела site.com/razdel-1/razdel-2/page на на страницы другого раздела site.com/razdel-1/page
RewriteRule ^blog/raznoe/(.*)$ http://site.ru/blog/$1
Следующее правило корректно перенаправит посетителей с каждой конкретной страницы старого сайта на такую же страницу на новом сайте. Например со страницы oldsite.com/page на newsite.com/page
RewriteCond %{HTTP_HOST} ^www.oldsite.com$
RewriteCond %{HTTP_HOST} ^test.oldsite.com$
RewriteRule ^(.*)$ http://newsite.com/$1
Когда пользователь хочет увидеть сайт (отправляет запрос на сервер хостера), то сервер возвращает ему ответ с кодом. Коды 1-399 свидетельствуют о нормальной работе сервера, а коды 400-599 сообщают об ошибке сервера (коды всех ошибок смотрите в спец. статье). Например, если сервер с вашим сайтом перегружен, или у него происходит перезагрузка, то пользователь увидит непонятный ему текст (например, 500 Internal Server Error), подумает, что сайт больше не будет работать и больше никогда на него не вернется. Чтобы вместо стандартной страницы ошибки (непонятно для пользователя) показать ему вашу отдельную страницу, на которой будет например, сообщение о том, что сайт временно не работает, но позже восстановит свою работу и на него обязательно стоит вернуться (сайт КиноПоиск при перегрузки серверов выдает сообщение "Матрица перезагружается..." и соответствующую картинку). Наиболее распространенным решением является составление собственной страницы вместо стандартной 404-ошибки. Эта ошибка показывается пользователю, если введен адрес несуществующей страницы. Думающие вебмастеры, создают свою страницу вместо непонятной стандартной, на которой пишут, что человек перешел по несуществующей ссылке и предлагают поискать нужную информацию на сайте, а не уйти с него. Пример нашей 404-страницы можно увидеть . Чтобы показывать пользователям свою страницу ошибки вместо стандартной, нужно создать отдельную страницу (например http://yoursite.com/404.html) и добавить соответствующий код в файл.htaccess Вот примеры кода, который нужно добавить:
ErrorDocument 400 http://yoursite.com/400.html
ErrorDocument 404 http://yoursite.com/404.html
ErrorDocument 500 http://yoursite.com/500.html
Если вы хотите подставить другую страницу вместо ошибки 403, то нужно указывать еще текстовое сообщение, которое будет показано, например:
ErrorDocument 403 "Sorry can"t allow you access today, see you later alligator:)"
Файл.htaccess дает большие возможности для улучшения безопасности сайта. Наиболее популярные мы сейчас перечислим:
#Включает отслеживание сим-ссылок
Options +FollowSymLinks
#Запускает url_rewriting
RewriteEngine On
#Блокирует все ссылки, содержащие <script>
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E)
#Блокирует все скрипты, которые пытаются изменить переменные PHP Globals:
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%{0,2})
#Блокирует все скрипты, которые пытаются изменить переменную _REQUEST:
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%{0,2})
#Перенаправляет все подобные попытки на страницу с ошибкой 403 - запрещено
RewriteRule ^(.*)$ index.php
Часто вебмастеры-умельцы узнают путь к картинке на вашем сайте и вставляют его в код своей странички. В итоге основная страничка загружается с его сервера, а картинка - с вашего. Это позволяет ему экономить свой трафик, и использовать ваш.
Options +FollowSymlinks
#Запрещает кражу картинок
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?yoursite.com/
RewriteRule .*.(gif|jpg|png)$ http://yoursite.com/images/stop_stealing.gif
yoursite.com - адрес вашего сайта
http://yoursite.com/images/stop_stealing.gif - путь к картинке, которую вы сами должны создать. На ней обычно пишут "не крадите картинки с чужих сайтов" или что-то подобное.
Применяется против спамеров и прочих неадекватов, изредка для предотвращения хакерских атак.
#Вносим сюда нежелательные IP адреса
allow from all
deny from 164.186.15.116
deny from 124.153.34.144
Чтобы заблокировать доступ для всех, кроме конкретных IP-адресов, добавляем такой код:
#Запрещает доступ для всех, кроме указанных IP-адресов
ErrorDocument 403 http://www.yoursite.com
Order deny,allow
Deny from all
Allow from 164.186.15.116
Allow from 124.153.34.144
#Запрещает просмотр содержимого папки
Options All -Indexes
#Защищает файл myfile.txt
order allow,deny
deny from all
Например чтобы запретить доступ ко всем файлам.txt пишем так:
Order Deny,Allow
Deny from all
Часто у пользователя в браузере установлено очень много расширений, которые передают серверу (на котором расположен ваш сайт) информацию о себе и другую лишнюю информацию. Такую же информацию посылают на сервер клиентские приложения установленные на компьютере пользователя, а также различные роботы и пауки. Информацию о большинстве актуальных на сегодня "Юзер Агентах" можно найти .
#Блокирует нижеперечисленных User Agent-ов
SetEnvIfNoCase user-Agent ^FrontPage
SetEnvIfNoCase user-Agent ^Java.*
SetEnvIfNoCase user-Agent ^Microsoft.URL
SetEnvIfNoCase user-Agent ^MSFrontPage
SetEnvIfNoCase user-Agent ^Offline.Explorer
SetEnvIfNoCase user-Agent ^ebandit
SetEnvIfNoCase user-Agent ^Zeus
Order Allow,Deny
Allow from all
Deny from env=bad_bot
Бывает такое, что один пользователь заходит к вам на сайт и видит его нормальным, а другой видит абракадбру вместо букв. Это происходит из-за кодировки сайта. Чтобы браузер пользователя правильно ее распознал, сайт делается в одной из популярных кодировок:
UTF-8 - универсальная двухбайтовая кодировка
Windows-1251 - Кириллица (Windows)
KOI8-r - Кириллица (КОИ8-Р)
cp866 - Кириллица (DOS)
Windows-1250 - Центральная Европа (Windows)
Windows-1252 - Западная Европа (Windows)
Также кодировку нужно указывать в мета-теге каждой страницы сайта, это сообщает браузеру в какой кодировке сделан сайт.
Если данный мета-тег не указан, то можно сообщить браузеру, какая у вас кодировка, с помощью файла.htaccess:
AddDefaultCharset WINDOWS-1251
Если работают оба варианта (и мета-тег, и файл.htaccess), то очень важно, чтобы кодировка в них совпадала.
Также есть возможность, чтобы сервер автоматически перекодировал все файлы, которые на него загружаются:
Чтобы выключить перекодировку сервера нужно вписать:
Включение данной функции позволяет серверу сжать информацию, перед тем, как он отправит ее пользователю. В итоге скорость работы сайта возрастет, но это немного увеличит нагрузку на сервер (на котором хранится ваш сайт), т.к. ему придется выполнять операцию сжатия налету. Чтобы включить Gzip-сжатие в файл.htaccess нужно добавить следующие строки (попробуйте поочередно добавить 3 варианта кода, проверяя скорость , и оставьте тот вариант, который дает наибольшее ускорение):
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css application/x-javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0 no-gzip
BrowserMatch bMSIE !no-gzip !gzip-only-text/html
mod_gzip_on Yes
mod_gzip_item_include file \.js$
mod_gzip_item_include file \.css$
FileETag MTime Size
ExpiresActive on
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
Улучшенное кэширование позволяет не загружать второй раз данные (картинки, основные элементы дизайна и т.д.), которые уже были загружены пользователем в момент первого просмотра сайта. Таким образом для конкретно взятого пользователя, вторая и последующие просмотренные страницы загрузятся гораздо быстрее, а нагрузка на ваш сервер существенно снизится. Улучшить кэширование сайта можно с помощью следующего кода (пробуйте по очереди два варианта, и оставляйте наиболее быстрый, скорость проверяем ):
ExpiresActive On
ExpiresByType application/javascript "access plus 7 days"
ExpiresByType text/javascript "access plus 7 days"
ExpiresByType text/css "access plus 7 days"
ExpiresByType image/gif "access plus 7 days"
ExpiresByType image/jpeg "access plus 7 days"
ExpiresByType image/png "access plus 7 days"
FileETag MTime Size
ExpiresActive on
ExpiresDefault "access plus 1 month"
В выражении "access plus ..." установите срок хранения файлов на компьютере пользователя. По истечении этого срока, при запросе к сайту файлы будут единоразово загружены с сервера. Оптимальным будет от 7 дней до месяца, хотя иногда устанавливается и год.
Как правило при заходе на сайт сначала загружается страница index.html или index.php. Чтобы изменить это правило (в начале станет загружаться mypage.php) добавляем в.htaccess такой код:
Обычно за настройки PHP отвечает файл php.ini, но часть этих настроек можно задать через.htaccess. Для этого используются два выражения: php_value - для логических значений (например включить\выключить), и php_flag для числовых значений. Вот правила написания этих выражений:
php_flag директива1 ЗНАЧЕНИЕ1
php_value директива2 ЗНАЧЕНИЕ2
где ЗНАЧЕНИЕ1 может быть on, off, 1 или 0 (1 и on - означает включить, а 0 и off - выключить);
ЗНАЧЕНИЕ2 - любое числовое или буквенное значение, которое подходит под конкретную директиву;
директива1 (используется только с php_flag) может иметь значения:
magic_quotes_gpc - вкл\выкл функцию magic_quotes_gpc
display_startup_errors
- вкл\выкл показ ошибок, которые происходят при работе PHP
php_flag display_startup_errors 1
display_errors
- вкл\выкл показ ошибки в браузер
output_buffering
- вкл\выкл буферизацию вывода данных
register_globals
- вкл\выкл глобальные переменные
engine
- вкл\выкл исполнение PHP в папке в которой находится.htaccess и во всех вложенных
директива2 (используется только с php_value) может иметь такие значения:
upload_max_filesize
- устанавливает максимальный размер загружаемого файла
php_value upload_max_filesize 10M
user_agent
- задает значение строки user_agent, которую передает сервер
php_value user_agent “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)”
post_max_size
- задает максимальный размер пересылаемой почты
mysql.default_user
- задает имя пользователя базы данных
php_value mysql.default_user databaseuser
mysql.default_password
- задает пароль для пользователя БД
php_value mysql.default_password jk323jh4g
mysql.default_host
- задает имя хоста БД (обычно это localhost)
php_value mysql.default_host localhost
sendmail_from
- задает имейл для отправки почты с помощью PHP
auto_prepend_file
- задает файл, который будет добавлен в начало каждого PHP-скрипта
php_value auto_prepend_file /www/publiс_html/myfile.php
auto_append_file
- задает файл, который будет добавлен в конец каждого PHP-скрипта
php_value auto_append_file /www/publiс_html/myfile.php
Файл.htaccess позволяет задать конфигурации веб-сайта без необходимости изменять конфигурационные файлы сервера. Точка в начале имени файла означает, что файл является скрытым.
Файл.htaccess можно создать в текстовом редакторе, а затем подгрузить его на сайт с помощью ftp-клиента
Примечание : имя файла.htaccess не содержит дополнительных слов или расширений.
Кроме того, расположение такого файла также имеет огромное значение. Конфигурации в этом файле будет влиять на все содержимое каталога, в котором находится сам файл, а также на все его подкаталоги.
Хотя страница.htaccess невероятно полезна и может заметно улучшить сайт, при ее использовании нужно помнить о двух моментах.
Во-первых, это скорость . Страница.htaccess может немного снизить скорость сервера; в большинстве случаев это почти незаметно. Это происходит из-за расположения страницы: как уже говорилось, файл.htaccess влияет на страницы и подкаталоги в своем каталоге. Каждый раз, когда страница загружается, сервер проверяет ее каталог, а также каждый каталог уровнем выше, пока не достигает наивысшего каталога или файла.htaccess. Этот процесс будет происходить до тех пор, пока параметр AllowOverride позволяет использовать файлы.htaccess, вне зависимости от того, существуют ли вообще такие файлы в системе.
Во-вторых, это безопасность . Получить доступ к файлу.htaccess гораздо проще, чем к обычному конфигурационному файлу Apache, а внесенные в него изменения будут активированы сразу, без необходимости перезагружать сервер. Потому пользователи, имеющие права на внесение изменений в файл.htaccess, могут серьезно влиять на сам сервер. Любая директива, внесенная в.htaccess, имеет тот же эффект, что и директива, внесенная непосредственно в конфигурации Apache.
Имея доступ к настройкам сервера, можно отредактировать конфигурации Apache, чтобы позволить файлам.htaccess подменять стандартные конфиги сайта. Откройте конфигурационный файл хоста apache2 по умолчанию.
Примечание : на данном этапе понадобятся sudo-привилегии.
sudo nano /etc/apache2/sites-available/default
Открыв файл, найдите следующий раздел и измените значение директивы AllowOverride с None на All. Раздел должен выглядеть так:
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
Сохраните и закройте файл, а затем перезапустите apache.
sudo service apache2 restart
Как уже говорилось, файл.htaccess можно создать при помощи текстового редактора, а затем загрузить его на сайт через ftp-клиент (при этом имя файла.htaccess не должно содержать дополнительных слов или расширений).
Или же можно создать такой файл с помощью терминала; для этого используйте следующую команду, заменив example.com именем сайта.
sudo nano /var/www/example.com/.htaccess
Один из самых полезных аспектов файла. Пространство файла.htaccess можно использовать для того, чтобы определить/изменить способ отображения URL-адресов и веб-страниц на сайте. Подробную информацию о том, как это делается, можно найти по этой ссылке.
Хотя файл.htaccess не требует столько прав, как стандартный конфигурационный файл apache2.conf, его все же можно использовать, чтобы внести в защиту сайта эффективные изменения. Дело в том, что.htaccess позволяет запрашивать пароль для доступа к определенным разделам веб-страницы. Пароли.htaccess хранятся в файле по имени.htpasswd.
Примечание : по соображениям безопасности хранить такой файл в каталоге сайта категорически не рекомендуется.
В файле.htpasswd нужно указать имена и пароли всех пользователей, которым разрешен доступ к защищенной части сайта.
Имена и пароли вносятся в файл в виде пары имя_пользователя:зашифрованный_пароль. Например, если пользователь с именем best_user имеет пароль awesome, то такая пара может иметь вид «best_user:VtweQU73iyETM».
Примечание : каждая пара вносится в отдельную строку. Файл.htpasswd может содержать столько строк, сколько необходимо.
Создав.htpasswd, внесите в.htaccess следующий код, чтобы активировать функцию аутентификации:
AuthUserFile /usr/local/username/safedirectory/.htpasswd
AuthGroupFile /dev/null
AuthName Please Enter Password
AuthType Basic
Require valid-user
Строка AuthUserFile определяет путь к файлу.htpasswd.
Строка AuthGroupFile указывает расположение.htgroup. Поскольку на данный момент такого файла не существует, оставьте значение /dev/null.
Строка AuthName содержит текст, который будет отображаться в приглашении ввести пароль (можно ввести абсолютно любой текст).
AuthType относится к типу аутентификации, который будет использоваться для проверки паролей. Пароли проверяются через HTTP, ключевое слово Basic изменять нельзя.
СтрокаRequire valid- user говоритфайлу.htaccess, что в защищенные паролем разделы сайта должны иметь доступ несколько человек. В случае если нужно указать определенного человека, имеющего доступ к закрытым частям сайта, вместо строки Require valid-user используется строка Require user имя_пользователя .
Файл.htaccess позволяет создавать для сайта пользовательские страницы ошибок. Некоторые из наиболее распространенных ошибок являются:
Пользовательские страницы ошибок создаются с целью сделать страницы сайта более доброжелательными и предоставить посетителю сайта более подробную информацию, чем страницы ошибок сервера по умолчанию.
Для примера можно создать страницу 404 (попробуйте создать любую страницу ошибки на ваш выбор).
Создав и загрузив страницу ошибки, укажите ее местонахождение в файле.htaccess:
ErrorDocument 404 /new404.html
Запомните : Apache ищет страницу 404 в root-каталоге сайта. Поместив новую страницу ошибки 404 в каком-либо подкаталоге, не забудьте добавить этот подкаталог в строку, например:
ErrorDocument 404 /error_pages/new404.html
В случаях, когда на сайте размещены некоторые файлы приложений, для отображения которых сервер не был настроен, в файл.htaccess можно добавить MIME-типы для сервера Apache с помощью следующего кода:
AddType audio/mp4a-latm .m4a
Не забудьте заменить приложение и расширение файла MIME-типом, который нужно поддерживать.
Технология Server Side Includes отлично экономит время на веб-сайте. Одним из наиболее распространенных способов использования SSI является обновление большого количества страниц, содержащих определенный блок данных, без необходимости обновлять каждую страницу по отдельности (например, чтобы изменить цитату в нижней части страницы).
Чтобы включить SSI, введите в.htaccess следующий код:
AddType text/html .shtml
AddHandler server-parsed .shtml
Эти строки сообщают.htaccess о том, что файлы.shtml действительны, а вторая строка говорит серверу проверять все файлы, которые заканчиваются на.shtml, на наличие SSI-команд.
Тем не менее, если на сервере находится большое количество страниц.html, поменять расширение которых на.shtml займет много времени, можно использовать другую тактику их проверки на SSI-команды. Для этого используется параметр XBitHack.
Добавление этой строки в файл.htaccess заставляет Apache проверять все html-файлы с соответствующими правами для Server Side Includes.
Чтобы позволить странице использовать XBitHack, введите:
chmod +x имя_страницы .html
Данное руководство охватывает лишь основные функции страницы.htaccess, которые, тем не менее, делают работу с сайтом гораздо более гибкой. При возникновении каких-либо вопросов или дополнений о возможностях файла.htaccess, пожалуйста, оставьте свой комментарий.
Tags: ,Начнем издалека, чтобы и новичкам был понятен принцип работы описываемого в статье файла. Для функционирования сайта в Интернете нужен не только компьютер и выход к сети, но и установленное на него специальное ПО, которое обеспечивает доступ к данным по протоколам http и https. Таким программным обеспечением и является веб-сервер. Существуют различные типы веб-серверов, но самый распространенный - Apache. Он построен на открытом коде, предоставляется бесплатно, постоянно дорабатывается и улучшается, совместим с многими скриптами и работает почти на всех платформах, включая Windows, Linux, Netware 5.x.
Настраивается Apache через конфигурационные файлы, которые хранятся в текстовом формате. С их помощью можно задать определенные правила действия веб-сервера. Главный конфигурационный файл называется httpd.conf или apache.conf (в зависимости от дистрибутива ОС). Во многих случаях все конфигурации сервера можно указывать именно здесь, и в основном такой способ предпочтительней, потому что:
А) уменьшает время ответа веб-сервера при запросе (так при каждом обращении к веб-серверу Apache не будет просматривать все каталоги на наличие.htaccess); б) некоторые директивы, например директивы модуля mod_rewrite, во многих отношениях работают лучше из главного конфигурационного файла.
Но доступ к этому файлу может быть не у всех пользователей сервера (например, в случае с виртуальным хостингом), поэтому остальным предлагается файл дополнительной конфигурации веб-сервера - .htaccess
(c точкой в начале названия).
Файл (или файлы) .htaccess будет задавать правила работы веб-сервера только в каталоге, где он размещен, и его дочерних каталогах, без глобальных изменений работы всего сервера. Возможность использовать.htaccess прописывается директивой (т.е. командой) AllowOverride в главном конфигурационном файле httpd.conf, название которой прямо говорит о том, что настройки внутри.htaccess приоритетны перед настройками в httpd.conf (если иное не ограничено все той же директивой AllowOverride). С помощью этой директивы можно позволить все, а можно - только некоторые действия. Детальную инструкцию по его применению можно найти на сайте Apache.
С ней, при каждом обращении к веб-серверу, Apache будет просматривать все каталоги на наличие.htaccess. Изменения в файле действительны сразу после сохранения - перезагрузка всего веб-сервера не нужна (в отличие от изменений в httpd.conf).
Имя файла.htaccess - общепринятое, но вовсе не обязательное. В httpd.conf можно задать другое имя с помощью директивы AccessFileName , например, так:
AccessFileName .config
Как уже говорилось, конфигурационные файлы имеют текстовый формат, и создать.htaccess также можно с помощью текстового редактора (например, Блокнота или NotePad++ в Windows).
Имя файла - .htaccess (с точкой в начале);
тип - «Все файлы»;
формат переноса по словам;
режим ASCII (при загрузке.htaccess на хостинг по FTP-протоколу).
Apache - регистрозависимый веб-сервер, поэтому важно написать название маленькими буквами: .HTaccess и.htaccess - это разные файлы.
В Mac ОS файлы, начинающиеся с точки, невидимы. Поэтому вы можете назвать его иначе и после, переместив по FTP на хостинг, переименовать. Обычно размещают файл в корневой директории веб-сервера (/public_html ) либо в корневой директории сайта (/public_html/site.com/ ).
Синтаксис.htaccess аналогичен синтаксису httpd.conf. Для каждой директивы предполагается отдельная строка. Для своего же удобства вы можете вносить в файл комментарии с помощью знака #, и значение после # будет игнорироваться веб-сервером. Этот трюк можно использовать для отключения любой директивы. Ее не нужно удалять полностью из файла – достаточно просто закомментировать.
Возможности конфигурационного файла огромны. Ниже приведены базовые настройки в.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 # где "Directory Name" - имя директории,которую нужно защитить, а # /home/cpanel_user/.htpasswds/public_html/smth/passwd - путь к файлу passwd с логинами и паролями разрешенных пользователей. # В файле должны быть записи вида пользователь:пароль
Иногда вместо ожидаемой страницы посетитель может натолкнуться на ответ веб-сервера в виде ошибки с лаконичным, но не всегда понятным для простого пользователя объяснением причины. Полный список кодов состояния можно найти в Википедии . Для самых распространенных (например, 404 или 500 ошибки) желательно создать свою страницу, которая лучше смотрится и представляет посетителю пути выхода. Задается она следующим образом:
ErrorDocument 404 http://yourdomain.com/error/404.html # где http://yourdomain.com/error/404.html - путь к созданной странице.
P.S. Пользователи услуги от сайт могут воспользоваться для создания своей страницы функционалом контрольной панели cPanel (в разделе «Расширенный » пункт «Страницы ошибок »).
Для создания постоянного перенаправления используется директива 301 редиректа, которая передает весь вес страницы на новый URL (поэтому оно предпочтительней, чем 302 редирект - в целях SEO).
Перенаправление всего сайта на новый домен:
Redirect 301 / http://www.newdomain.com/
Перенаправление страницы на новую:
Redirect 301 /page1.html http://mydomain.com/page2.html
Незаменимым механизмом для изменения 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, потому что многие из тех, которые ведут к изменению конфигурации веб-сервера, запрещены по понятным причинам - эти изменения затронут всех пользователей на носителе.
Проверить работу файла можно, прописав несложные директивы, которые при правильном синтаксисе и верных настройках httpd.conf (как описывалось в начале статьи) должны сработать:
– например, запретив доступ к сайту извне с помощью директивы
Order deny,allow Deny from all
– или записав в файл набор бессмысленных символов, которые не являются директивами. Если веб-сервер взаимодействует с htaccess, то он, конечно, не сможет их прочитать и отдаст 500 ошибку.
Если проблема действительно существует, нужно в первую очередь искать причину в главном конфигурационном файле:
– убедиться, что сервер разрешает использование файла.htaccess: есть запись AllowOverride All (и она не закомментирована с помощью #);
– проверить, что создана запись VirtualHost для домена. В качестве примера:
– название файла дополнительной конфигурации указано как вам нужно. Если это.htaccess, то:
AccessFileName .htaccess
– присутствует хостнейм сервера (указывается при создании URL-перенаправлений) в виде IP-адреса сервера или домена:
ServerName www.example.com
Если же причина не в httpd.conf, нужно проверить сам.htaccess на наличие синтаксических ошибок. Можно воспользоваться онлайн-сервисами (например, http://www.htaccesscheck.com/ , http://htaccess.madewithlove.be/), или - , где есть полный перечень директив вместе с синтаксисом.
Крайне желательно перед любым редактированием делать резервную копию файла – чтобы при худшем исходе можно было «откатить» изменения обратно.
Хотя изменения и сразу вступают в силу, кэш браузера никто не отменял. Для проверки работы сайта после редактирования.htaccess регулярно пользуйтесь его очисткой или загружайте страницу в обход кэша - через комбинацию клавиш Ctrl + F5 (в Safari: Ctrl + R , в Mac OS: Cmd + R ).
Самая распространенная ошибка веб-сервера при работе с.htaccess - 500. Она указывает на проблему в синтаксисе (опечатка в директиве, например), либо же в главном конфигурационном файле не разрешен такой тип директивы.
Лучший источник вдохновения для работы с.htaccess:
Многие инструкции по работе с.htacess, на русском.