Поиск

четверг, 12 июля 2012 г.

20 тонкостей .htaccess, которые должен знать каждый веб-разработчик

Файл конфигурации Apache .htaccess (расшифровывается как hypertext access) может быть мощным инструментом для веб-разработчика, если использовать его должным образом. Он может находиться в любой папке вашего сервера и может быть легко изменен в любом текстовом редакторе. В этой статье я расскажу о 20 тонкостях использования .htaccess.




Перед тем как начать, я бы хотел отметить, что злоупотребление .htaccess может привести к ухудшению работы вашего сайта. Файл .htaccess должен использоваться только если у вас нет других способов достижения нужного результата.
Сохраните копию вашего .htaccess файла до того как пробовать описанные здесь методы.

1. Предотвращение хотлинкинга

Надоело что кто-нибудь забивает ваш канал используя рисунки расположенные на вашем хостинге? Добавьте следующий код в конец .htaccess для того чтобы предотвратить это.
  1. Options +FollowSymlinks
  2. # Защищаем от хотлинкинга
  3. RewriteEngine On
  4. RewriteCond %{HTTP_REFERER} !^$
  5. RewriteCond %{HTTP_REFERER} !^http://(www.)?domainname.com/ [nc]
  6. RewriteRule .*.(gif|jpg|png)$ http://domainname.com/img/stop_stealing_bandwidth.gif[nc]

2. Блокировка запросов по User Agent

Чтобы уменьшить нагрузку на сервер можно заблокировать пользователей с нежелательными юзер-агентами.
  1. #Блокируем плохих ботов
  2. SetEnvIfNoCase user-Agent ^FrontPage [NC,OR]
  3. SetEnvIfNoCase user-Agent ^Java.* [NC,OR]
  4. SetEnvIfNoCase user-Agent ^Microsoft.URL [NC,OR]
  5. SetEnvIfNoCase user-Agent ^MSFrontPage [NC,OR]
  6. SetEnvIfNoCase user-Agent ^Offline.Explorer [NC,OR]
  7. SetEnvIfNoCase user-Agent ^[Ww]eb[Bb]andit [NC,OR]
  8. SetEnvIfNoCase user-Agent ^Zeus [NC]
  9. <limit get="" post="" head="">
  10. Order Allow,Deny
  11. Allow from all
  12. Deny from env=bad_bot
  13. </limit>

3. Перенаправление всех, кроме определенных IP

Если вам надо заблокировать или, наоборот, разрешить доступ к сайту только для определенных ip адресов, добавте следующий код в ваш .htaccess файл
  1. ErrorDocument 403 http://www.domainname.com
  2. Order deny,allow
  3. Deny from all
  4. Allow from 124.34.48.165
  5. Allow from 102.54.68.123

4. 301 редирект, дружественный для SEO

Если вы переносите сайт на другой домен или хотите перенаправить страницу или страницы в другое место без штрафа от поисковых машин (например Гугла), используйте следующий код:
  1. Redirect 301 /d/file.html http://www.domainname.com/r/file.html

5. Настройка страницы ошибок сервера

С помощью .htaccess можно легко определить страницы для собственного отображения страниц со стандартными HTTP ошибками:
  1. ErrorDocument 401 /error/401.php
  2. ErrorDocument 403 /error/403.php
  3. ErrorDocument 404 /error/404.php
  4. ErrorDocument 500 /error/500.php

6. Блокировка по IP адресам

Вы устали получать спам от одних и тех же пользователей? Вы можете забанить их по IP, для этого добавьте следующий код:
  1. allow from all
  2. deny from 145.186.14.122
  3. deny from 124.15

7. Настроить email администратора сайта по умолчанию

Используя следующий код вы сможете определить email администратора по умолчанию.
  1. ServerSignature EMail
  2. SetEnv SERVER_ADMIN default@domain.com

8. Отключить запроса на скачивание файла

Обычно, когда вы скачиваете что-либо с сайта, браузер выдает запрос: открыть файл или сохранить его на диск. Чтобы отключить это и оставить возможность только сохранить файл, используйте следующий код:
  1. AddType application/octet-stream .pdf
  2. AddType application/octet-stream .zip
  3. AddType application/octet-stream .mov

9. Защита файлов

Следующий код позволит вам запретить доступ к любым вашим файлам, выдавая 403 ошибку при попытке получить их. Ниже показано как закрыть доступ в файлу .htaccess, что повысит безопасность сервера:
  1. # защищаем файл .htaccess
  2. <files .htaccess="">
  3. order allow,deny
  4. deny from all
  5. </files>

10. Сжатие трафика с помощью mod_deflate

Как альтернативу Gzip, вы можете использовать mod_deflate (который, кстати, быстрее). Вставьте следующий код в начало вашего файла .htaccess (вы можете так же добавить .jpg|.gif|.png|.tiff|.ico):
  1. <ifmodule mod_deflate.c="">
  2. <filesmatch .(js|css)$="">
  3. SetOutputFilter DEFLATE
  4. </filesmatch>
  5. </ifmodule>

11. Установить время жизни кэша

Следующий код показывает, как установить время жизни вашего контента в заголовке ответа сервера.
  1. <filesmatch .(ico|pdf|flv|jpg|jpeg|png|gif|swf)$="">
  2. Header set Expires "Wed, 21 May 2010 20:00:00 GMT"
  3. </filesmatch>

12. Страница по умолчанию

Вы можете определить страницу, которая будет выдаваться по умолчанию для каждой директории сайта. Например, следующий код установит страницу по умолчанию about.html, вместо не index.html
  1. DirectoryIndex about.html

13. Защита паролем директорий и файлов

Вы можете защитить любые файлы или директории паролем используя следующий код:
  1. # защищаем файл паролем
  2. <files secure.php="">
  3. AuthType Basic
  4. AuthName “Prompt”
  5. AuthUserFile /home/path/.htpasswd
  6. Require valid-user
  7. </files>
  8. # защищаем паролем директорию
  9. resides
  10. AuthType basic
  11. AuthName “This directory is protected”
  12. AuthUserFile /home/path/.htpasswd
  13. AuthGroupFile /dev/null
  14. Require valid-user

14. Перенаправить старый домен на новый

Используя .htaccess вы можете перенаправить запросы к старому домену на новый используя следующий код:
  1. RewriteEngine On
  2. RewriteRule ^(.*)$ http://www.domainname.com/$1 [R=301,L]

15. Принудительное кэширование

Этот совет не увеличит непосредственно скорость работы сайта. Но он будет работать быстрее, когда пользователь зайдет на ваш сайт в следующий раз, сервер отправит 304 статус, означающий что контент не изменился. Вы можете изменить время жизни кэша задав его в секундах (в примере стоит 1 день)
  1. FileETag MTime Size
  2. ExpiresActive on
  3. ExpiresDefault “access plus 86400 seconds”

16. Сжатие трафика использую Gzip

Используя Gzip вы можете существенно уменьшить трафик с вашего сервера и сделать работу сайта быстрее.
  1. AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css application/x-javascript
  2. BrowserMatch ^Mozilla/4 gzip-only-text/html
  3. BrowserMatch ^Mozilla/4.0[678] no-gzip
  4. BrowserMatch bMSIE !no-gzip !gzip-only-text/html

17. Сделать более красивые адреса

Например, чтобы преобразовать http://yourdomain.com/category/blue в http://yourdomain.com/blue добавьте следующий код в ваш .htaccess файл:
  1. RewriteRule ^category/(.+)$ http://www.yourdomain.com/$1 [R=301,L]

18. Отключить просмотр директорий

Чтобы предотвратить просмотр пользователями директорий вашего сайта, где может содержаться важная для безопасности информация (например директория с плагинами вордпресс), добавте следующий код в ваш .htacess файл:
  1. Options All -Indexes

19. Редирект ленты новостей WordPress на FeedBurner

Следующий кусок кода показывает как перекинуть rss ленту WordPress на FeedBurner.
  1. #Редирект ленты новостей WordPress на FeedBurner
  2. <ifmodule mod_rewrite.c="">
  3. RewriteEngine on
  4. RewriteCond %{HTTP_USER_AGENT} !FeedBurner [NC]
  5. RewriteCond %{HTTP_USER_AGENT} !FeedValidator [NC]
  6. RewriteRule ^feed/?([_0-9a-z-]+)?/?$ http://feeds.feedburner.com/yourfeed [R=302,NC,L]
  7. </ifmodule>

20. Запретить комментарии для запросов без Referrer

Проблема в том, что ботам проще публиковать спам (например, о том, как увеличить интимные части вашего тела :), не переходя ни с какого другого сайта. Это выглядит, как будто они падают с неба. Этот совет запрещает отправлять сообщения, если пользователь пришел ниоткуда.
  1. RewriteEngine On
  2. RewriteCond %{REQUEST_METHOD} POST
  3. RewriteCond %{REQUEST_URI} .wp-comments-post\.php*
  4. RewriteCond %{HTTP_REFERER} !.*yourblog.com.* [OR]
  5. RewriteCond %{HTTP_USER_AGENT} ^$
  6. RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]
    http://blog.kron0s.com/20-htaccess-hacks-every-web-developer-should-know-about