20 тонкостей .htaccess, которые должен знать каждый веб-разработчик
Файл конфигурации Apache .htaccess (расшифровывается как hypertext access) может быть мощным инструментом для веб-разработчика, если использовать его должным образом. Он может находиться в любой папке вашего сервера и может быть легко изменен в любом текстовом редакторе. В этой статье я расскажу о 20 тонкостях использования .htaccess.
Перед тем как начать, я бы хотел отметить, что злоупотребление .htaccess может привести к ухудшению работы вашего сайта. Файл .htaccess должен использоваться только если у вас нет других способов достижения нужного результата.
Сохраните копию вашего .htaccess файла до того как пробовать описанные здесь методы.
1. Предотвращение хотлинкинга
Надоело что кто-нибудь забивает ваш канал используя рисунки расположенные на вашем хостинге? Добавьте следующий код в конец .htaccess для того чтобы предотвратить это.
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 адресов, добавте следующий код в ваш .htaccess файл
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 редирект, дружественный для SEO
Если вы переносите сайт на другой домен или хотите перенаправить страницу или страницы в другое место без штрафа от поисковых машин (например Гугла), используйте следующий код:
Redirect 301 /d/file.html http://www.domainname.com/r/file.html
5. Настройка страницы ошибок сервера
С помощью .htaccess можно легко определить страницы для собственного отображения страниц со стандартными HTTP ошибками:
ErrorDocument 401 /error/401.php
ErrorDocument 403 /error/403.php
ErrorDocument 404 /error/404.php
ErrorDocument 500 /error/500.php
6. Блокировка по IP адресам
Вы устали получать спам от одних и тех же пользователей? Вы можете забанить их по IP, для этого добавьте следующий код:
allow from all
deny from 145.186.14.122
deny from 124.15
7. Настроить email администратора сайта по умолчанию
Используя следующий код вы сможете определить 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, что повысит безопасность сервера:
# защищаем файл .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. Установить время жизни кэша
Следующий код показывает, как установить время жизни вашего контента в заголовке ответа сервера.
<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>
# защищаем паролем директорию
resides
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/$1 [R=301,L]
15. Принудительное кэширование
Этот совет не увеличит непосредственно скорость работы сайта. Но он будет работать быстрее, когда пользователь зайдет на ваш сайт в следующий раз, сервер отправит 304 статус, означающий что контент не изменился. Вы можете изменить время жизни кэша задав его в секундах (в примере стоит 1 день)
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. Сделать более красивые адреса
Например, чтобы преобразовать http://yourdomain.com/category/blue в http://yourdomain.com/blue добавьте следующий код в ваш .htaccess файл:
RewriteRule ^category/(.+)$ http://www.yourdomain.com/$1 [R=301,L]
18. Отключить просмотр директорий
Чтобы предотвратить просмотр пользователями директорий вашего сайта, где может содержаться важная для безопасности информация (например директория с плагинами вордпресс), добавте следующий код в ваш .htacess файл:
Options All -Indexes
19. Редирект ленты новостей WordPress на FeedBurner
Следующий кусок кода показывает как перекинуть rss ленту WordPress на FeedBurner.
#Редирект ленты новостей 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. Запретить комментарии для запросов без Referrer
Проблема в том, что ботам проще публиковать спам (например, о том, как увеличить интимные части вашего тела :), не переходя ни с какого другого сайта. Это выглядит, как будто они падают с неба. Этот совет запрещает отправлять сообщения, если пользователь пришел ниоткуда.
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]
http://blog.kron0s.com/20-htaccess-hacks-every-web-developer-should-know-about
Комментарии
Отправить комментарий