Настраиваем .htaccess - 24 варианта использования
Файл конфигурации .htaccess может быть очень мощным инструментом разработчика при его правильном использовании. Его можно найти в корневой папке сервера, редактируется обычным текстовым редактором. В этой статье собрано более 20 применений файла .htaccess
Прежде чем перейти к возможностям .htaccess, хочу сказать, что чрезмерное злоупотребление .htaccess может снизить производительность вашего сайта. Следует использовать .htaccess, только если нет другого способа решить задачу.
Сделайте резервную копию вашего файла, прежде чем вносить изменения.
1. Ограничение доступа с других сайтов¶
Не нравится, когда картинки с вашего сервера используют на своих сайтах? Добавьте эти строчки кода, чтобы избежать этого.
Options +FollowSymlinks RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www.)?domainname.com/ [nc] RewriteRule .*.(gif|jpg|png)$ http://domainname.com/img/stop_stealing_bandwidth.gif[nc]
2. Ограничение доступа по user-agent¶
Возможно заблокировать всех нежелательных пользователей, которые могут причинить вред серверу.
SetEnvIfNoCase user-Agent ^FrontPage [NC,OR] SetEnvIfNoCase user-Agent ^Java.* [NC,OR] SetEnvIfNoCase user-Agent ^Microsoft.URL [NC,OR] SetEnvIfNoCase user-Agent ^MSFrontPage [NC,OR] SetEnvIfNoCase user-Agent ^Offline.Explorer [NC,OR] SetEnvIfNoCase user-Agent ^[Ww]eb[Bb]andit [NC,OR] SetEnvIfNoCase user-Agent ^Zeus [NC] <Limit GET POST HEAD> Order Allow,Deny Allow from all Deny from env=bad_bot </Limit>
3. Редирект всем, кроме определенной группы IP¶
Если по некоторой причине вы хотите отказать в доступе (или наоборот, разрешить) некоторой группе IP адресов, следующий код для вас.
ErrorDocument 403 http://www.domainname.com Order deny,allow Deny from all Allow from 124.34.48.165 Allow from 102.54.68.123
4. 301 редиректы для поисковых роботов¶
Если вы перенесли сайт на другой домен или хотите перенаправить посетителя с одной страницы на другую без ущерба для поисковых роботов, используйте следующий код.
Redirect 301 /d/file.html http://www.domainname.com/r/file.html
5. Пользовательская страница с ошибками¶
Надоели стандартные сообщения об ошибках? Теперь вы можете создать свои собственные.
ErrorDocument 401 /error/401.php ErrorDocument 403 /error/403.php ErrorDocument 404 /error/404.php ErrorDocument 500 /error/500.php
6. IP бан-лист¶
Кто-то постоянно оставляет комментарии в вашем блоге? Запретите надоедливого пользователя с помощью этих строчек.
allow from all deny from 145.186.14.122 deny from 124.15
7. Email администратора¶
Следующий код устанавливает адрес электронной почты администратора вашего сервера.
ServerSignature EMail SetEnv SERVER_ADMIN default@domain.com
8. Отменить запрос об открытии файла¶
Обычно при скачивании, браузер спрашивает, хотите вы открыть или сохранить выбранный файл. Чтобы избежать этого необязательного вопроса, используйте следующий код.
AddType application/octet-stream .pdf AddType application/octet-stream .zip AddType application/octet-stream .mov
9. Защитить отдельный файл¶
Следующий код позволяет вам отказать в доступе к любому файлу. Сервер выдаст ошибку 403 всем, кто попытается открыть файл. Пример показывает, как защитить .htaccess файл.
<Files .htaccess> order allow,deny deny from all </Files>
10. Сжатие с mod_deflate¶
Наряду с Gzip архивированием файлов, вы можете использовать mod_deflate (что предположительно быстрее). Поместите указанный код в начало вашего .htaccess файла (вы также можете добавить картинки .jpg, .gif, .png, .tiff, .ico).
<IfModule mod_deflate.c> <FilesMatch ".(js|css)$"> SetOutputFilter DEFLATE </FilesMatch> </IfModule>
11. Добавление заголовка Expires¶
Представленный код показывает, как добавить информацию о времени жизни файла.
<FilesMatch ".(ico|pdf|flv|jpg|jpeg|png|gif|swf)$"> Header set Expires "Wed, 21 May 2010 20:00:00 GMT" </FilesMatch>
12. Страница по умолчанию¶
Вы можете установить страницу по умолчанию для любой директории. Пример ниже устанавливает about.html вместо index.html.
DirectoryIndex about.html
13. Защита паролем¶
Вы можете включить аутентификацию любой директории или файла на вашем сервере.
# защита файла <Files secure.php> AuthType Basic AuthName "Prompt" AuthUserFile /home/path/.htpasswd Require valid-user </Files> # защита директории AuthType basic AuthName "This directory is protected" AuthUserFile /home/path/.htpasswd AuthGroupFile /dev/null Require valid-user
14. Перенос на новый домен¶
Используя .htaccess, вы можете перенаправить пользователей на новый домен.
RewriteEngine On RewriteRule ^(.*)$ http://www.domainname.com/ [R=301,L]
15. Кеширование¶
Представленный ниже код не увеличит время загрузки файлов сервера. Единственное, что изменится, - контент будет загружаться быстрее для пользователей, которые уже были на сайте. Вы можете изменить срок действия кеша, изменив число секунд (в сутках 86400 секунд).
FileETag MTime Size ExpiresActive on ExpiresDefault "access plus 86400 seconds"
16. Gzip сжатие¶
Используйте Gzip, чтобы ваш сайт грузился быстрее.
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[678] no-gzip BrowserMatch bMSIE !no-gzip !gzip-only-text/html
17. Убрать папку с URL¶
Чтобы http://yourdomain.com/category/blue изменить на http://yourdomain.com/blue, добавьте строчку в ваш .htaccess.
RewriteRule ^category/(.+)$ http://www.yourdomain.com/ [R=301,L]
18. Disable Directory Browsing¶
Чтобы запретить пользователям просматривать содержимое папок, используйте код ниже. Эта информация может быть весьма ценной для злоумышлеников. Чтобы открыть доступ, замените минус на плюс.
Options All -Indexes
19. Редирект WordPress фида на FeedBurner¶
Представленный ниже код перенаправляет RSS фид WordPress к FeedBurner.
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_USER_AGENT} !FeedBurner [NC] RewriteCond %{HTTP_USER_AGENT} !FeedValidator [NC] RewriteRule ^feed/?([_0-9a-z-]+)?/?$ http://feeds.feedburner.com/yourfeed [R=302,NC,L] </IfModule>
20. Защита от ботов¶
Данный пример для пользователей WordPress. При добавлении комментария сервер сравнивает заголовок Referer с "wp-comments-post.php". Если он не совпадает, комментарий не добавится.
RewriteEngine On RewriteCond %{REQUEST_METHOD} POST RewriteCond %{REQUEST_URI} .wp-comments-post\.php* RewriteCond %{HTTP_REFERER} !.*yourblog.com.* [OR] RewriteCond %{HTTP_USER_AGENT} ^$ RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]
21. Удалить расширение файла из URL¶
Представленный ниже код удаляет расширение .php (можете задать html) из строки адреса. Обновленный код поисковикам понравится больше.
RewriteRule ^(([^/]+/)*[^.]+)$ /.php [L]
22. Добавить www в строку адреса¶
Если вы хотите, чтобы в адресе вашего сайта присутствовал префикс www, добавьте следующие строчки.
RewriteEngine on RewriteCond %{HTTP_HOST} ^example\.com [NC] RewriteRule (.*) http://www.example.com/ [R=301,L]
23. Убрать www из строки адреса¶
Для решения обратной задачи, используйте такой код.
RewriteEngine on RewriteCond %{HTTP_HOST} ^www\.example\.com [NC] RewriteRule (.*) http://example.com/ [R=301,L]
24. Запретить прямой доступ к сайту¶
Если нужно разрешить доступ на страницу только тем, кто перешел на сайт по ссылке, используйте следующие строчки кода.
RewriteEngine on RewriteCond %{HTTP_REFERER} ^$ RewriteRule ^.*$ - [F]
Необходимо ограничить сайты рефералы? Запишите их в RewriteCond.
almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.
Вы можете почитать все статьи от almix'а.
- 0 Composer – пакетный менеджер PHP. Что и как? (22.07.2014)
- 0 MySQL и PHP: Вычисление возраста (количество лет) по дате рождения (20.06.2017)
- 0 Как изменить часовой пояс на сервере (16.11.2013)
- 0 PHP: Как удалить файлы по маске? (07.11.2013)
- 0 Регулярные выражения в PHP (12.04.2014)
- 0 Защита от спама в phpBB3 без капчи (09.10.2013)
- 0 Php функция implode внутри запроса SELECT к MySQL. (02.09.2013)
- 0 Как убрать папку www из денвера? (22.03.2013)
- 0 Устанавливаем и настраиваем WampServer (аналог MAMP в Mac и возможная замена Denwer'у) на Windows (22.03.2013)
- 0 Полезные возможности PhpStorm и настройка горячих клавиш (14.03.2013)
- Артефакты при ресайзе библиотекой GD изображений с однородным (белым) фоном (07.12.2017)
- Задаем область печати документа для PHPExcel (05.12.2017)
- Как включить SSL и сделать редирект на HTTPS. На примере Opencart 2 (03.12.2017)
- Смена кодировки Битрикса с windows-1251 в UTF-8 (utf8) (01.12.2017)
- Свой дизайн кнопок социальных сетей для сайта. Кнопки "Поделиться" (19.06.2017)
- Ошибка: Invalid argument supplied for foreach() in ... (09.04.2017)
- Загрузка файлов (картинок) по ajax через форму для Opencart (04.09.2016)
- Модальное окно Bootstrap 3 с формой, отправляющей email по Ajax (JQuery/PHP/HTML5/JqBootstrapValidation) (20.08.2015)
- VQmod — да или нет? (29.08.2014)
- Настройка PhpStorm для работы с Yii (24.02.2013)
- Флаги в подстановке директивы модуля - RewriteRule в файле .htaccess. Важность флага QSA. (02.01.2013)
- Как корректно вставить в MySQL текст с кавычками, используя PHP? (06.12.2012)
- Как объединить два массива в один на PHP (слить элементы массивов) (18.09.2012)
- Команды для сron job (для планировщика Cron на хостинге) (29.08.2012)
- Отправка сообщений в Twitter через php (13.08.2012)