10+ вставок кода для htaccess
Файл .htaccess
— один из тех файлов, которые должен быть известен и понятен каждому администратору веб сайта. На базовом уровне он управляет доступом к папкам сайта. Но есть еще много задач, которые htaccess может решить для вас.
1. Управление доступом к файлам и каталогам
Защита паролем – это один аспект вопроса, но иногда нужно полностью блокировать пользователю возможность доступа к определённым файлам или каталогам. Такие задачи обычно возникают для системных папок, например, includes
. Приложение должно иметь доступ к ним, а пользователь лишается всех привилегий.
Для решения задачи добавьте следующий код в файл .htaccess
и сохраните его в нужном каталоге:
deny from all
Но такой ход блокирует доступ для всех, включая вас. Чтобы обеспечить себе доступ нужно указать IP свой адрес. Вот код:
order deny,allow deny from all allow from xxx.xxx.xxx.xxx
xxx.xxx.xxx.xxx
– ваш IP адрес. Если заменить последние три цифры на 0/12
, например, то будет указан диапазон IP адресов в одной сети. Но такой подход может привести к проблемам, поэтому лучше указывать список IP адресов раздельно.
Если нужно блокировать определенный файл, включая сам .htaccess
, используйте следующий код:
<Files .htaccess> order allow,deny deny from all </Files>
Аналогично, если вам требуется открыть доступ с определенных IP адресов, перечислите их с помощью allow from
.
Если нужно блокировать доступ к определённым типам файлов, используйте следующий код:
<FilesMatch ".(htaccess|htpasswd|ini|phps|fla|psd|log|sh)$"> Order Allow,Deny Deny from all </FilesMatch>
2. Запрещаем просмотр директории
Для запрещения просмотра содержимого директории используйте следующий код:
Options All -Indexes
Но если вам нужно по каким-то причинам разрешить просмотр директории, используйте следующий код:
Options All +Indexes
3. Ускоряем загрузку с помощью сжатия файлов
Вы можете сжимать любые файлы, а не только изображения. Например, для сжатия HTML файлов используйте следующий код:
AddOutputFilterByType DEFLATE text/html
А для сжатия текстовых:
AddOutputFilterByType DEFLATE text/plain
Можно также сжимать JavaScript файлы или определять несколько типов файлов для архивации:
AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/rss+xml
В качестве альтернативы можно сжимать все HTML, JavaScript, CSS и прочие файлы с помощью GZIP:
<IfModule mod_gzip.c> 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.* </IfModule>
4. Защищаем сайт от хотлинкинга
Если вы хотите предотвратить хотлинкинг изображений с вашего сайта, добавьте следующие строки в файл .htaccess
:
RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?вашдомен.ru [NC] RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]
Просто замените вашдомен.ru
на название своего домена.
5. Блокирование пользователей перенаправленных с определенного домена
Если вы не приветствуете пользователей определенного домена, то можно забанить на своем сайте. Например, если ваш сайт попал в список там, откуда не желателен трафик (например, порнографические сайты, неонацисткие ресурсы и прочее), то вы можете перекрыть его с помощью страницы 403 (запрет доступа). Нужно, чтобы был включен mod_rewrite
(обычно он включен). Добавляем код:
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_REFERER} bannedurl1.com [NC,OR] RewriteCond %{HTTP_REFERER} bannedurl2.com [NC,OR] RewriteRule .* - [F] </ifModule>
Нужно заменить bannedurl1.com
и bannedurl2.com
на имена доменов из вашего черного списка. Флаг [NC]
указывает на отсутствие чувствительности к регистру в имени домена, а флаг [F]
определяет действие – в нашем примере вывод страницы 403. Если нужно забанить несколько сайтов, используйте флаг [NC,OR]
для каждого домена, включая последний. Для запрета только одного домена можно использовать только флаг [NC]
.
6. Блокирование запросов от определенных агентов
Если в вашем журнале имеются записи о действиях определенных агентов пользователей (роботов или пауков), которые вам не нравятся, то можно добавить несколько строк в файл .htaccess
и запретить таким агентам доступ к вашему сайту:
RewriteEngine On RewriteBase / SetEnvIfNoCase Referer "^$" bad_user SetEnvIfNoCase User-Agent "^badbot1" bad_user SetEnvIfNoCase User-Agent "^badbot2" bad_user SetEnvIfNoCase User-Agent "^badbot3" bad_user Deny from env=bad_user
Замените badbot1
, badbot1
и так далее именами агентов из вашего журнала. Такое действие будет держать данные программы подальше от вашего сайта.
7. Кеширование файлов
Другой метод ускорения загрузки вашего сайта – кеширование файлов. вот что нужно добавить в файл .htaccess
для включения кеширования:
<FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf)$"> Header set Cache-Control "max-age=2592000" </FilesMatch>
Вы можете добавить типы файлов (или удалить некоторые из них) к списку в примере. Также можно использовать max-age
для указания времени в секундах, для хранения ваших файлов в кеше.
8. Отключение кеширования для определенных типов файлов
Если вам не нужно кешировать определенные типы файлов, то можно просто не включать их в список. Однако, иногда файлы могут кешироваться даже если вы не объявили их в списке. В таких случаях можно отключить кеширование только для таких типов файлов. В большинстве случаев требуется отключать кеширование для динамических файлов, таких как скрипты. Вот код:
<FilesMatch ".(pl|php|cgi|spl|scgi|fcgi)$"> Header unset Cache-Control </FilesMatch>
Просто добавьте типы фалов, которые не нужно кешировать в список.
9. Пропускаем диалог загрузки
По умолчанию, когда вы загружаете файл с веб сервера, то появляется диалог, в котором запрашивается действие с файлом (сохранить или открыть). Данный диалог очень раздражает при загрузке больших медиа файлов или документов PDF. Если файлы загружены на ваш сервер для того, чтобы пользователь их скачал, то можно сразу начать процесс. Нужно поместить в файл .htaccess
следующие строки:
AddType application/octet-stream .pdf AddType application/octet-stream .zip AddType application/octet-stream .mp3
10. Переименование файла .htaccess
По некоторым причинам, обычно связанным с безопасностью, может потребоваться переименование файла .htaccess
. Что очень просто сделать. Теоретически, переименование файла .htaccess
не должно вызывать проблем с выполнением приложений на вашем сервере, но если они вдруг появятся, нужно просто восстановить оригинальное имя.
AccessFileName htac.cess
Также нужно обновить всех вхождения в самом файле и там, где упоминается .htaccess
, иначе возникнет масса ошибок.
11. Изменение индексной страницы по умолчанию
Если вам требуется, чтобы индексная страница отличалась от значения по умолчанию, index.html
, index.php
, index.htm
и так далее, то данная задача решается легко. Вот что нужно добавить в файл .htaccess
:
DirectoryIndex mypage.html
Замените mypage.html
на адрес URL нужной страницы.
12. Перенаправление на безопасное соединение https
Если вы используете https и хотите, чтобы все пользователи перенаправлялись на него, то вам поможет следующий код:
RewriteEngine On RewriteCond %{HTTPS} !on RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
13. Ограничение размера файла загрузки в PHP, максимального размера запроса и максимального времени выполнения скрипта
.htaccess
позволяет устанавливать некоторые значения, которые влияют на приложения PHP. Например, если вам требуется ограничить загрузку в PHP по причине экономии пространства на хостинге, используйте следующий код:
php_value upload_max_filesize 15M
Конечно, вы можете установить значение, которое требуется, в нашем примере 15M (MB) не является фиксированным. Также можно ограничить максимальны размер запроса для загрузки в PHP:
php_value post_max_size 10M
Измените 10M
на то значение, которое вам требуется.
Если вы не хотите, чтобы скрипт выполнялся вечно, то можно ограничить время его работы:
php_value max_execution_time 240
240
– количество секунд до прерывания работы скрипта.
Если требуется ограничить время для скрипта на разбор введенных данных, используйте следующую строку:
php_value max_input_time 180
14. Маскировка типов файлов
Иногда нужно скрыть от пользователя типы файлов на сервере. Один из способов решить задачу – замаскировать их. Например, вы можете сделать так. что все файлы будут выглядеть как HTML или PHP:
ForceType application/x-httpd-php ForceType application/x-httpd-php
Заключение
Существует еще множество задач, которые может решить .htaccess
. Например, можно установить автоматический перевод страниц сайта, или временную зону, или удалить www из адреса URL, и многое другое. Но прежде чем начать эксперименты с .htaccess
всегда нужно сделать резервную копию оригинала, чтобы была возможность вернуться к исходному коду.