О файле .htaccess и о том как с ним можно работать, должен знать каждый веб-мастер. Файл предназначен для дополнительной конфигурации веб-сервера Apache. Обычно с его помощью управляют доступом к каталогам сайта, а также формируют человеко-понятные URL. Но это далеко не все, что Вы можете сделать с .htaccess.
ВАЖНО: прежде чем начинать эксперименты с .htaccess, всегда делайте резервную копию оригинального файла!
Итак, вот несколько вариантов использования .htaccess:
1. Управление доступом к файлам и каталогам
Иногда бывает необходимо полностью блокировать пользователей от доступа к определенной папке. Чтобы сделать это, вставьте следующий код в файл .htaccess и поместите его (файл) в каталог, доступ к которому следует закрыть:
deny from all
Однако, будет заблокирован доступ для всех, включая вас. Чтобы предоставить себе доступ нужно указать свой IP-адрес(а). Вот код:
order deny,allow
deny from all
allow from xxx.xxx.xxx.xxx
xxx.xxx.xxx.xxx ваш IP. Первая строка определяет порядок, сначала запрещаем доступ к каталогу, а затем разрешаем для определенного IP.
Если Вы хотите заблокировать доступ к файлу, в том числе к самому .htaccess, используйте следующий фрагмент:
<Files .htaccess>
deny from all
</Files>
Аналогичным образом можно добавить разрешение для IP.
Чтобы закрыть доступ к какому-то оному типу файлов:
<Files "*.pdf">
deny from all
</Files>
Если вы хотите закрыть доступ к нескольким типам файлов, используйте это:
<FilesMatch ".(htaccess|htpasswd|ini|php|fla|psd|log|sh)$">
deny from all
</FilesMatch>
2. Отключение просмотра каталогов
Для предотвращения просмотра каталога (и его дочерних каталогов) в браузере, необходимо добавить следующее:
Options All -Indexes
Однако, если по какой-то причине Вы хотите разрешить просмотр, измените его на следующее:
Options All +Indexes
3. Ускорение времени загрузки путем сжатия файлов
Вы можете сжимать файлы любого типа, а не только изображения. Например, для сжатия HTML файлов, использовать это (должен быть подключен mod_deflate):
AddOutputFilterByType DEFLATE text/html
Для сжатия текстовых файлов:
AddOutputFilterByType DEFLATE text/plain
Вы также можете сжать JavaScript, или добавить сжатие для различных типов файлов с помощью одной команды:
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE text/css
Кроме того, если вы хотите сжать все ваши JavaScript, HTML, 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. Защитить свой сайт от Хотлинкинга
Если Вы не хотите, чтобы кто-то добавлял изображения с вашего сайта на свой, тем самым увеличивая нагрузку на ваш сервер, используйте это:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]
Просто замените yourdomain.com на свой домен.
5. Блокировка посетителей, перешедших из определенного домена
Чтобы запретить вход на сайт посетителям с определенного домена, дабы понизить трафик, закрыть доступ не желанным посетителям, вы можете показать им страницу Forbidden 403. Для работы фрагмента должен быть включен модуль mod_rewrite:
RewriteEngine on
RewriteCond %{HTTP_REFERER} badsite\.com [NC]
RewriteRule .* - [F]
Если «плохих» источников больше:
RewriteEngine on
RewriteCond %{HTTP_REFERER} badsite\.com [NC,OR]
RewriteCond %{HTTP_REFERER} anotherbadsite\.com
RewriteRule .* - [F]
6. Блокировать не желательных ботов и пауков
Этот метод может блокировать определенных ботов или пауков от индексирования вашего сайта (требуется mod_rewrite).
SetEnvIfNoCase ^User-Agent$ .*(craftbot|download|extract|stripper|sucker|ninja|clshttp|webspider|leacher|collector|grabber|webpictures) HTTP_SAFE_BADBOT
7. Кэширование файлов
Еще один способ ускорить загрузку вашего сайта — кэширование файлов. Вот то, что вам нужно добавить для того, чтобы добиться этого:
<FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf)$">
Header set Cache-Control "max-age=2592000"
</FilesMatch>
Бывают случаи когда без вашего ведома файлы кэшируют, чтобы обойти это, используем:
<FilesMatch ".(pl|php|cgi|spl|scgi|fcgi)$">
Header unset Cache-Control
</FilesMatch>
8. Пользовательские страницы ошибок
Для того, чтобы перенаправить пользователя при наступлении ошибки на заготовленную для этого страницу, используем следующий код:
ErrorDocument 401 /error/401.php
ErrorDocument 403 /error/403.php
ErrorDocument 404 /error/404.php
ErrorDocument 500 /error/500.php
Следуют указать путь, в данном случае файлы находятся в каталоге error.
9. Изменение индексной страницы
Стандартные индексные страницы это index.html, index.php, index.htm. Если Вы хотите задать другую страницу как заглавную, сделать это легко:
DirectoryIndex mypage.html
Замените mypage.html на требуемое название страницы, которую Вы подготовили.
10. Перенаправление на защищенное соединение HTTPS
Если вы используете HTTPS и хотите, чтобы пользователи были перенаправлены на защищенное соединение, используйте это:
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
11. Работа с директивами PHP.ini
.htaccess позволяет манипулировать некоторыми значениями директив файла php.ini, которые непосредственно влияют на PHP.
Однако следует установить максимально возможные привилегии для .htaccess — директива AllowOverride в файле httpd.conf, должна быть установлена в значение Options, либо в значение All.
AllowOverride All
Например, если вы хотите увеличить максимальный размер загружаемого на сервер файла, используйте этот фрагмент для вашего .htaccess:
php_value upload_max_filesize 15M
Вы также можете установить максимальный размер данных передаваемых в POST методом:
php_value post_max_size 10M
Или установить максимальное время выполнения php-сценариев, в секундах:
php_value max_execution_time 240
Более подробный список смотрите
ЗДЕСЬ.
12. Маскировка расширения файлов
Один из способов, чтобы скрыть расширение файлов — это замаскировать их под другое. Например файл php замаскировать под обычный html:
AddType application/x-httpd-php .htm .html
Чтобы достичь желаемого результата, вы должны переименовать все PHP-скрипты в соответствии с выбранным вами расширением.