Связаться
+79263772075
info@el-komp.ru

Blog

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

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

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

Убедитесь в том, что вы сделали резервную копию оригинального файла .htaccess для вашего сайта, прежде чем вносить какие-либо изменения. Кроме того, помните — работоспособность указанных ниже правил зависит от индивидуальных настроек вашего web-сервера, заданных хостером. Некоторые директивы могут быть запрещены и не работать.

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

Файл .htaccess может быть размещён в любом каталоге. Директивы этого файла действуют на все файлы в текущем каталоге и во всех его подкаталогах (если эти директивы не переопределены директивами нижележащих файлов .htaccess).

Для того чтобы эти файлы .htaccess можно было использовать, необходимы соответствующие настройки главного конфигурационного файла (значение директивы AllowOverride должно быть установлено All). Как правило, подавляющее большинство хостеров разрешают использовать свои файлы .htaccess.

1. Запрещаем загрузку файлов с внешних сайтов

Вам надоели люди, которые размещают картинки, опубликованные на вашем сайте — на своих ресурсах, тем самым расходуя ваш траффик и создавая ненужную нагрузку на ваш хостинг? Данный код, размещенный в конце вашего файла .htaccess, позволит предотвратить загрузку ваших изображений — сторонними сайтами.

Options <span class="sh_symbol">+</span>FollowSymlinks
#Запрещаем загрузку файлов с внешних сайтов
RewriteEngine On
RewriteCond <span class="sh_symbol">%</span><span class="sh_cbracket">{</span><span class="sh_value">https_REFERER</span><span class="sh_cbracket">}</span> <span class="sh_symbol">!^</span>$
RewriteCond <span class="sh_symbol">%</span><span class="sh_cbracket">{</span><span class="sh_value">https_REFERER</span><span class="sh_cbracket">}</span> <span class="sh_symbol">!^</span>https<span class="sh_symbol">:</span><span class="sh_comment">//(www.)?site.com/ [nc]</span>
RewriteRule <span class="sh_symbol">.*.(</span>gif<span class="sh_symbol">|</span>jpg<span class="sh_symbol">|</span>png<span class="sh_symbol">)</span>$ https<span class="sh_symbol">:</span><span class="sh_comment">//site.com/stop.gif[nc]</span>

Не забудьте изменить site.com на ваше доменное имя и создать изображение stop.gif, которое будет показано вместо запрошенной картинки.

2. Блокируем все запросы от нежелательных User Agents

Это правило позволяет заблокировать нежелательные User Agent, которые могут быть потенциально опасными или просто перегружать сервер ненужными запросами.

#Блокируем плохих ботов и роботов
SetEnvIfNoCase user<span class="sh_symbol">-</span>Agent <span class="sh_symbol">^</span>FrontPage <span class="sh_symbol">[</span>NC<span class="sh_symbol">,</span>OR<span class="sh_symbol">]</span>
SetEnvIfNoCase user<span class="sh_symbol">-</span>Agent <span class="sh_symbol">^</span>Java<span class="sh_symbol">.*</span> <span class="sh_symbol">[</span>NC<span class="sh_symbol">,</span>OR<span class="sh_symbol">]</span>
SetEnvIfNoCase user<span class="sh_symbol">-</span>Agent <span class="sh_symbol">^</span>Microsoft<span class="sh_selector">.URL</span> <span class="sh_symbol">[</span>NC<span class="sh_symbol">,</span>OR<span class="sh_symbol">]</span>
SetEnvIfNoCase user<span class="sh_symbol">-</span>Agent <span class="sh_symbol">^</span>MSFrontPage <span class="sh_symbol">[</span>NC<span class="sh_symbol">,</span>OR<span class="sh_symbol">]</span>
SetEnvIfNoCase user<span class="sh_symbol">-</span>Agent <span class="sh_symbol">^</span>Offline<span class="sh_selector">.Explorer</span> <span class="sh_symbol">[</span>NC<span class="sh_symbol">,</span>OR<span class="sh_symbol">]</span>
SetEnvIfNoCase user<span class="sh_symbol">-</span>Agent <span class="sh_symbol">^[</span>Ww<span class="sh_symbol">]</span>eb<span class="sh_symbol">[</span>Bb<span class="sh_symbol">]</span>andit <span class="sh_symbol">[</span>NC<span class="sh_symbol">,</span>OR<span class="sh_symbol">]</span>
SetEnvIfNoCase user<span class="sh_symbol">-</span>Agent <span class="sh_symbol">^</span>Zeus <span class="sh_symbol">[</span>NC<span class="sh_symbol">]</span>
<span class="sh_symbol">&lt;</span>limit get<span class="sh_symbol">=</span>"" post<span class="sh_symbol">=</span>"" head<span class="sh_symbol">=</span>""<span class="sh_symbol">&gt;</span>
Order Allow<span class="sh_symbol">,</span>Deny
Allow from all
Deny from env<span class="sh_symbol">=</span>bad_bot
<span class="sh_symbol">&lt;/</span>limit<span class="sh_symbol">&gt;</span>

Список User Agent браузеров, роботов и пауков поисковых машин, веб-каталогов, менеджеров закачек, спам-ботов и плохих ботов можно найти на сайте List of User-Agents.

3. Запрещаем доступ для всех, кроме указанных IP-адресов

Если по какой-либо причине, вы хотите запретить всем или разрешить только отдельным IP-адресам доступ к вашему сайту — добавьте этот код в ваш .htaccess-файл:

#Запрещаем доступ для всех<span class="sh_symbol">,</span> кроме указанных IP<span class="sh_symbol">-</span>адресов
ErrorDocument 403 https<span class="sh_symbol">:</span><span class="sh_comment">//www.domainname.com</span>
Order deny<span class="sh_symbol">,</span>allow
Deny from all
Allow from 124<span class="sh_selector">.34.48.165</span>
Allow from 102<span class="sh_selector">.54.68.123</span>

Не забудьте изменить domainname.com на ваше доменное имя.

4. Настраиваем SEO-Friendly 301 Redirect

Если вы перенесли доменное имя (или свой подсайт) или хотите перенаправлять пользователя на определенную страницу (страницы), без санкций со стороны поисковых машин, используйте этот код:

#Настраиваем SEO<span class="sh_symbol">-</span>Friendly 301 Redirect
Redirect 301 <span class="sh_symbol">/</span>1<span class="sh_symbol">/</span>file<span class="sh_selector">.html</span> https<span class="sh_symbol">:</span><span class="sh_comment">//www.site.com/2/file.html</span>

Не забудьте изменить site.com на ваше доменное имя, а /1/file.html и /2/file.html на соответствующие директории и страницы.

5. Создаем собственные страницы ошибок

Вам надоел стандартный вид страниц ошибок? Нет проблем — с помощью следующего кода, вы легко можете создать свою страницу и показывать пользователю именно ее:

ErrorDocument 401 <span class="sh_symbol">/</span>error<span class="sh_symbol">/</span>401<span class="sh_selector">.php</span>
ErrorDocument 403 <span class="sh_symbol">/</span>error<span class="sh_symbol">/</span>403<span class="sh_selector">.php</span>
ErrorDocument 404 <span class="sh_symbol">/</span>error<span class="sh_symbol">/</span>404<span class="sh_selector">.php</span>
ErrorDocument 500 <span class="sh_symbol">/</span>error<span class="sh_symbol">/</span>500<span class="sh_selector">.php</span>

Не забудьте создать в корневой директории вашего сервера папку error и разместить в ней соответствующие файлы.

6. Создаем черный список IP адресов

Устали от спам-комментариев или определенного пользователя? Просто заблокируйте его IP с помощью следующего кода, добавляемого в .htaccess-файл.

#Создаем черный список IP адресов
allow from all
deny from 145<span class="sh_selector">.186.14.122</span>
deny from 124<span class="sh_selector">.15</span><span class="sh_symbol">.</span>

Узнать IP адреса комментаторов можно или в логах Apache или с помощью сервисов статистики. У многих CMS есть свои встроенные средства для мониторинга адресов посетителей. Например, в Drupal IP- адреса комментаторов можно увидеть в административной панели — Отчеты.

7. Устанавливаем e-mail адрес по-умолчанию для администратора

Используйте данный код, для того, чтобы установить e-mail адрес по-умолчанию для администратора сервера.

#Устанавливаем e<span class="sh_symbol">-</span>mail адрес по<span class="sh_symbol">-</span>умолчанию для администратора
ServerSignature EMail
SetEnv SERVER_ADMIN default@domain<span class="sh_selector">.com</span>

Не забудьте заменить default@domain.com — своим e-mail адресом.

8. Защищаем определенный файл

Нижеследующий код позволяет вам запретить доступ к любому файлу — при запросе будет выдаваться ошибка 403. Для примера я закрыл доступ к самому файлу htaccess, повысив общий уровень безопасности сайта.

#Защищаем <span class="sh_selector">.htaccess</span> файл
<span class="sh_symbol">&lt;</span>files <span class="sh_selector">.htaccess</span><span class="sh_symbol">=</span>""<span class="sh_symbol">&gt;</span>
order allow<span class="sh_symbol">,</span>deny
deny from all
<span class="sh_symbol">&lt;/</span>files<span class="sh_symbol">&gt;</span>

9. Сжимаем элементы с помощью mod_deflate

В качестве альтернативы компрессии файлов с помощью Gzip, вы можете использовать mod_deflate (предположительно работает быстрее). Разместите следующий код в начале вашего файла .htaccess (также вы можете добавить перечисления .jpg|.gif|.png|.tiff|.ico):

#Сжимаем элементы с помощью mod_deflate
<span class="sh_symbol">&lt;</span>ifmodule mod_deflate<span class="sh_selector">.c</span><span class="sh_symbol">=</span>""<span class="sh_symbol">&gt;</span>
<span class="sh_symbol">&lt;</span>filesmatch <span class="sh_symbol">.(</span>js<span class="sh_symbol">|</span>css<span class="sh_symbol">)</span>$<span class="sh_symbol">=</span>""<span class="sh_symbol">&gt;</span>
SetOutputFilter DEFLATE
<span class="sh_symbol">&lt;/</span>filesmatch<span class="sh_symbol">&gt;</span>
<span class="sh_symbol">&lt;/</span>ifmodule<span class="sh_symbol">&gt;</span>

10. Добавляем срок жизни в заголовки

Данный код позволяет добавить сроки жизни в заголовки:

#Добавляем срок жизни в заголовки
<span class="sh_symbol">&lt;</span>filesmatch <span class="sh_symbol">.(</span>ico<span class="sh_symbol">|</span>pdf<span class="sh_symbol">|</span>flv<span class="sh_symbol">|</span>jpg<span class="sh_symbol">|</span>jpeg<span class="sh_symbol">|</span>png<span class="sh_symbol">|</span>gif<span class="sh_symbol">|</span>swf<span class="sh_symbol">)</span>$<span class="sh_symbol">=</span>""<span class="sh_symbol">&gt;</span>
Header set Expires «Wed<span class="sh_symbol">,</span> 21 May 2010 20<span class="sh_symbol">:</span>00<span class="sh_symbol">:</span>00 GMT»
<span class="sh_symbol">&lt;/</span>filesmatch<span class="sh_symbol">&gt;</span>

11. Устанавливаем страницы по-умолчанию

Обычно страницей по-умолчанию является index.html, однако с помощью этого кода вы можете настроить по-умолчанию любую другую страницу.

#Устанавливаем альтернативную страницу по<span class="sh_symbol">-</span>умолчанию
DirectoryIndex about<span class="sh_selector">.html</span>

12. Защищаем паролем папки и файлы

Вы можете включить проверку пароля для доступа в любую папку или файл на вашем сервере, используя этот код:

#защита паролем файла
<span class="sh_symbol">&lt;</span>files secure<span class="sh_selector">.php</span><span class="sh_symbol">=</span>""<span class="sh_symbol">&gt;</span>
AuthType Basic
AuthName «Prompt»
AuthUserFile <span class="sh_symbol">/</span>pub<span class="sh_symbol">/</span>home<span class="sh_symbol">/</span><span class="sh_selector">.htpasswd</span>
Require valid<span class="sh_symbol">-</span>user
<span class="sh_symbol">&lt;/</span>files<span class="sh_symbol">&gt;</span>
#защита паролем папки
resides
AuthType basic
AuthName «This directory is protected»
AuthUserFile <span class="sh_symbol">/</span>pub<span class="sh_symbol">/</span>home<span class="sh_symbol">/</span><span class="sh_selector">.htpasswd</span>
AuthGroupFile <span class="sh_symbol">/</span>dev<span class="sh_symbol">/</span>null
Require valid<span class="sh_symbol">-</span>user

Для того, чтобы организовать доступ к файлу по паролю, необходимо создать файл .htpasswd и внести в него пару логин-пароль в формате user:password.

Однако в этом случае пароли будут хранится в открытом виде, что не слишком хорошо с точки зрения безопасности. Поэтому оптимальнее пароль зашифровать. Для этого воспользуйтесь сервисами генерации записей в файлы .htpasswd. Например, вот таким.

В нашем примере файл с паролями доступа лежит в корневой директории сайта и называется .htpasswd. Директория указывается от корня сервера и если путь будет некорректным — Apache, не получив доступа к файлу, откажет в доступе к папке любому пользователю — в том чилсе и тому, который ввел правильную пару логин:пароль.

13. Перенаправляем со старого домена — на новый

Используя .htaccess, вы можете настроить перенаправление со старого доменного имени на новое, добавив следующий код:

#Перенаправляем со старого домена old<span class="sh_selector">.com</span>  — на новый
RewriteEngine On
RewriteRule <span class="sh_symbol">^(.*)</span>$ https<span class="sh_symbol">:</span><span class="sh_comment">//www.new.com/$1 [R=301,L]</span>

Перенаправление используется в том случае, если вы переносите свой существующий сайт на новое доменное имя. В этом случае любой пользователь, который наберет в адресной строке www.old.com — будет перенаправлен на www.new.com.

14. Усиливаем кеширование

Использование этого правила не означает прямое ускорение загрузки вашего сайта. Оно предназначено для более быстрой загрузки сайта — для уже заходившего на него посетителя, путем отправки статуса 304 для тех элементов, которые не обновлялись.

Таким образом, при повторной загрузке страницы браузер посетителя не будет заново скачивать изображения, скрипты или CSS, а выведет те файлы, которые уже хранятся в его кеше. Вы можете изменить срок жизни кеша, путем корректирования его значения в годах (year), месяцах (month) или, например — секундах (seconds). В примере указан 1 год.

#Усиливаем кеширование
FileETag MTime Size
<span class="sh_symbol">&lt;</span>ifmodule mod_expires<span class="sh_selector">.c</span><span class="sh_symbol">&gt;</span>
<span class="sh_symbol">&lt;</span>filesmatch "<span class="sh_symbol">.(</span>jpg<span class="sh_symbol">|</span>gif<span class="sh_symbol">|</span>png<span class="sh_symbol">|</span>css<span class="sh_symbol">|</span>js<span class="sh_symbol">)</span>$"<span class="sh_symbol">&gt;</span>
ExpiresActive on
ExpiresDefault «access plus 1 year»
<span class="sh_symbol">&lt;/</span>filesmatch<span class="sh_symbol">&gt;</span>
<span class="sh_symbol">&lt;/</span>ifmodule<span class="sh_symbol">&gt;</span>

15. Сжимаем компоненты сайта путем включения Gzip

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

#Сжимаем компоненты сайта путем включения Gzip
AddOutputFilterByType DEFLATE text<span class="sh_symbol">/</span>html text<span class="sh_symbol">/</span>plain <span class="sh_symbol">..</span>
<span class="sh_symbol">..</span> text<span class="sh_symbol">/</span>xml application<span class="sh_symbol">/</span>xml application<span class="sh_symbol">/</span>xhtml<span class="sh_symbol">+</span>xml <span class="sh_symbol">..</span> 
<span class="sh_symbol">..</span> text<span class="sh_symbol">/</span>javascript text<span class="sh_symbol">/</span>css application<span class="sh_symbol">/</span>x<span class="sh_symbol">-</span>javascript
BrowserMatch <span class="sh_symbol">^</span>Mozilla<span class="sh_symbol">/</span>4 gzip<span class="sh_symbol">-</span>only<span class="sh_symbol">-</span>text<span class="sh_symbol">/</span>html
BrowserMatch <span class="sh_symbol">^</span>Mozilla<span class="sh_symbol">/</span>4<span class="sh_selector">.0</span><span class="sh_symbol">[</span>678<span class="sh_symbol">]</span> no<span class="sh_symbol">-</span>gzip
BrowserMatch bMSIE <span class="sh_symbol">!</span>no<span class="sh_symbol">-</span>gzip <span class="sh_symbol">!</span>gzip<span class="sh_symbol">-</span>only<span class="sh_symbol">-</span>text<span class="sh_symbol">/</span>html

Обратите внимание, что включение компрессии приведет к большей нагрузке на процессор сервера. Здесь строка AddOutputFilterByType записывается в одну длинную строчку с двумя нижними (все .. нужно убрать).

16. Удаляем «category» из URL

Для изменения ссылки yourdomain.com/category/blue на yourdomain.com/blue, просто добавьте следующий код в конце вашего .htaccess файла.

#Удаляем category из URL
RewriteRule <span class="sh_symbol">^</span>category<span class="sh_symbol">/(.+)</span>$ https<span class="sh_symbol">:</span><span class="sh_comment">//www.site.com/$1 [R=301,L]</span>

Не забудьте изменить www.site.com на ваше доменное имя.

17. Запрещаем просмотр содержимого папки

Для того, чтобы ограничить доступ к директориям, которые могут содержать разнообразную информацию и для обеспечения безопасности сервера, добавьте этот код в файл .htaccess

#Запрещаем просмотр содержимого папки
Options All —Indexes

18. Перенаправляем свою RSS-ленту на FeedBurner

Покажем как это можно сделать на примере RSS-ленты Drupal на сервис Google Feedburner.

#Перенаправляем RSS<span class="sh_symbol">-</span>ленту Drupal на FeedBurner
<span class="sh_symbol">&lt;</span>ifmodule mod_rewrite<span class="sh_selector">.c</span><span class="sh_symbol">=</span>""<span class="sh_symbol">&gt;</span>
RewriteEngine on
RewriteCond <span class="sh_symbol">%</span><span class="sh_cbracket">{</span><span class="sh_value">https_USER_AGENT</span><span class="sh_cbracket">}</span> <span class="sh_symbol">!</span>FeedBurner <span class="sh_symbol">[</span>NC<span class="sh_symbol">]</span>
RewriteCond <span class="sh_symbol">%</span><span class="sh_cbracket">{</span><span class="sh_value">https_USER_AGENT</span><span class="sh_cbracket">}</span> <span class="sh_symbol">!</span>FeedValidator <span class="sh_symbol">[</span>NC<span class="sh_symbol">]</span>
RewriteRule <span class="sh_symbol">^</span>rss<span class="sh_selector">.xml</span>$ https<span class="sh_symbol">:</span><span class="sh_comment">//feeds.feedburner.com/yourfeed [R=302,NC,L]</span>
<span class="sh_symbol">&lt;/</span>ifmodule<span class="sh_symbol">&gt;</span>

Изначально необходимо зарегистрировать ленту своего блога в сервисе Feedburner. Далее не забудьте заменить yourfeed на имя вашей ленты уже в Feedburner.

19. Запрещаем комментарии от пользователей без Referrer

Чаще всего спам-боты обращаются напрямую к файлу комментариев, например к wp-comments-post.php, не заходя на страницы записей вашего блога. Приведенный ниже код позволяет заблокировать комментарии, отправленные пользователями, которые пришли «из ниоткуда», позволяя комментировать только тем читателям, которые перешли на страницу вашего блога с каких-либо других страниц (например, результатов поиска Google).

#Запрещаем комментарии от пользователей без Referrer
RewriteEngine On
RewriteCond <span class="sh_symbol">%</span><span class="sh_cbracket">{</span><span class="sh_value">REQUEST_METHOD</span><span class="sh_cbracket">}</span> POST
RewriteCond <span class="sh_symbol">%</span><span class="sh_cbracket">{</span><span class="sh_value">REQUEST_URI</span><span class="sh_cbracket">}</span> <span class="sh_selector">.comment</span><span class="sh_symbol">\/</span>reply<span class="sh_symbol">\</span><span class="sh_comment">/*</span>
<span class="sh_comment">RewriteCond %{https_REFERER} !.*yourblog.com.* [OR]</span>
<span class="sh_comment">RewriteCond %{https_USER_AGENT} ^$</span>
<span class="sh_comment">RewriteRule (.*) ^https://%{REMOTE_ADDR}/$ [R=301,L]</span>

Не забудьте заменить yourblog.com на доменное имя вашего блога.

20. Убираем расширение файла из URL

Данный код позволяет удалить расширение файла .php (вы можете изменить его на любое другое, например — .html) из URL-адресов страниц.

#Убираем расширение файла из URL
RewriteRule <span class="sh_symbol">^(([^/]+/)*[^.]+)</span>$ <span class="sh_symbol">/</span>$1<span class="sh_selector">.php</span> <span class="sh_symbol">[</span>L<span class="sh_symbol">]</span>

21. Защищаем сайт

Данный код позволяет защитить сайт от scripts enjection и нежелательных модификаций _REQUEST и/или GLOBALS:

#Включаем отслеживание сим<span class="sh_symbol">-</span>ссылок
Options <span class="sh_symbol">+</span>FollowSymLinks
#Запускаем url_rewriting
RewriteEngine On
#Блокируем все ссылки<span class="sh_symbol">,</span> содержащие <span class="sh_symbol">&lt;</span>script<span class="sh_symbol">&gt;</span>
RewriteCond <span class="sh_symbol">%</span><span class="sh_cbracket">{</span><span class="sh_value">QUERY_STRING</span><span class="sh_cbracket">}</span> <span class="sh_symbol">(\&lt;|%</span>3C<span class="sh_symbol">).*</span>script<span class="sh_symbol">.*(\&gt;|%</span>3E<span class="sh_symbol">)</span> <span class="sh_symbol">[</span>NC<span class="sh_symbol">,</span>OR<span class="sh_symbol">]</span>
#Блокируем все скрипты<span class="sh_symbol">,</span> которые пытаются изменить переменные PHP Globals<span class="sh_symbol">:</span>
RewriteCond <span class="sh_symbol">%</span><span class="sh_cbracket">{</span><span class="sh_value">QUERY_STRING</span><span class="sh_cbracket">}</span> GLOBALS<span class="sh_symbol">(=|\[|\%[</span>0<span class="sh_symbol">-</span>9A<span class="sh_symbol">-</span>Z<span class="sh_symbol">]</span><span class="sh_cbracket">{</span><span class="sh_value">0</span>,<span class="sh_value">2</span><span class="sh_cbracket">}</span><span class="sh_symbol">)</span> <span class="sh_symbol">[</span>OR<span class="sh_symbol">]</span>
#Блокируем все скрипты<span class="sh_symbol">,</span> которые пытаются изменить переменную _REQUEST<span class="sh_symbol">:</span>
RewriteCond <span class="sh_symbol">%</span><span class="sh_cbracket">{</span><span class="sh_value">QUERY_STRING</span><span class="sh_cbracket">}</span> _REQUEST<span class="sh_symbol">(=|\[|\%[</span>0<span class="sh_symbol">-</span>9A<span class="sh_symbol">-</span>Z<span class="sh_symbol">]</span><span class="sh_cbracket">{</span><span class="sh_value">0</span>,<span class="sh_value">2</span><span class="sh_cbracket">}</span><span class="sh_symbol">)</span>
#Перенаправляем все подобные на страницу с ошибкой 403 — запрещено
RewriteRule <span class="sh_symbol">^(.*)</span>$ index<span class="sh_selector">.php</span> <span class="sh_symbol">[</span>F<span class="sh_symbol">,</span>L<span class="sh_symbol">]</span>

22. Перенаправляем посетителя с помощью директивы RedirectMatch и регулярных выражений

Еще одна полезная директива, рекомендуемая к использованию  — RedirectMatch. Цитата: «Эта директива позволяет в качестве запрашиваемого адреса использовать регулярное выражение (пересылка не „с документа“, а „со всех документов, типа …“). Редирект внешний — браузеру сообщается о необходимости загрузить другую страницу.

Синтаксис:

RedirectMatch [status] regexp URL

Значения статусов (код возврата веб-сервера) стандартные:

permanent (301 — постоянный редирект), temp (302 — временный редирект, приходите ещё), seeother (303 — летим туда, там много вкусного), gone (410 — удалён навсегда).

Пример:

То же перенаправление со старого домена на новый без подключения RewriteEngine:

RedirectMatch 301 <span class="sh_symbol">^(.*)</span>$ www<span class="sh_selector">.domainname.com</span><span class="sh_symbol">/</span>$1

От себя добавлю, что вы можете использовать не только https-статусы, но и другие условия:

RedirectMatch <span class="sh_symbol">(.*)\</span><span class="sh_selector">.gif</span>$ https<span class="sh_symbol">:</span><span class="sh_comment">//www.myserver.com$1.png</span>
RedirectMatch <span class="sh_symbol">(.*\</span><span class="sh_selector">.jpg</span><span class="sh_symbol">)</span>$ https<span class="sh_symbol">:</span><span class="sh_comment">//www.myanother.com$1</span>

Обязательно сделайте резервную копию файла .htaccess до внесения изменений и проверьте работоспособность всего сайта — после добавления новых строк.

23. Защита от прямых ссылок для изображений через .htaccess

Хотлинк (Hotlink) — вставка прямых ссылок изображений или файлов с одного сайта на другие. Этот прием используется довольно часто, ну например, у вас на сервере не хватает места для хранения картинок и вы пользуетесь каким-либо бесплатным сервисом для хранения файлов изображений, т.е. загружаете картинку, получаете URL и вставляете его на свой сайт.

В итоге: вы сохраняете место для вашего сайта и используете пропускную способность хостинга для картинок, но это уже не ваше дело. Но вот как быть, если кто-то решил, что ваш сайт можно использовать как подобный сервис.

Как не стать бесплатным поставщиком изображений и файлов?

Есть ли защита от этого? Да, есть! Чтобы запретить другим сайтам пользоваться вашим трафиком и/или просто указывать прямые ссылки на ваши файлы (картинки), то добавьте в ваш .htaccess файл следующие строки:

# Запретить другим сайтам использовать прямые ссылки на ваши картинки
RewriteCond <span class="sh_symbol">%</span><span class="sh_cbracket">{</span><span class="sh_value">https_REFERER</span><span class="sh_cbracket">}</span> <span class="sh_symbol">!^</span>$
# Дальше список разрешенных доменов
RewriteCond <span class="sh_symbol">%</span><span class="sh_cbracket">{</span><span class="sh_value">https_REFERER</span><span class="sh_cbracket">}</span> <span class="sh_symbol">!^</span>https<span class="sh_symbol">(</span>s<span class="sh_symbol">)?:</span><span class="sh_comment">//(www.)?sitename.ru.*$ [NC]</span>
RewriteCond <span class="sh_symbol">%</span><span class="sh_cbracket">{</span><span class="sh_value">https_REFERER</span><span class="sh_cbracket">}</span> <span class="sh_symbol">!^</span>https<span class="sh_symbol">(</span>s<span class="sh_symbol">)?:</span><span class="sh_comment">//(www.)?sitename.ru:80.*$ [NC]</span>
# IP сайта <span class="sh_symbol">(</span>домена<span class="sh_symbol">)</span>
RewriteCond <span class="sh_symbol">%</span><span class="sh_cbracket">{</span><span class="sh_value">https_REFERER</span><span class="sh_cbracket">}</span> <span class="sh_symbol">!^</span>https<span class="sh_symbol">(</span>s<span class="sh_symbol">)?:</span><span class="sh_comment">//111.111.111.111.*$ [NC]</span>
RewriteCond <span class="sh_symbol">%</span><span class="sh_cbracket">{</span><span class="sh_value">https_REFERER</span><span class="sh_cbracket">}</span> <span class="sh_symbol">!^</span>https<span class="sh_symbol">(</span>s<span class="sh_symbol">)?:</span><span class="sh_comment">//111.111.111.111:80.*$ [NC]</span>
RewriteCond <span class="sh_symbol">%</span><span class="sh_cbracket">{</span><span class="sh_value">https_REFERER</span><span class="sh_cbracket">}</span> <span class="sh_symbol">!^</span>https<span class="sh_symbol">(</span>s<span class="sh_symbol">)?:</span><span class="sh_comment">//(www.)?yandex.ru [NC]</span>
RewriteCond <span class="sh_symbol">%</span><span class="sh_cbracket">{</span><span class="sh_value">https_REFERER</span><span class="sh_cbracket">}</span> <span class="sh_symbol">!^</span>https<span class="sh_symbol">(</span>s<span class="sh_symbol">)?:</span><span class="sh_comment">//(www.)?google. [NC]</span>
# RewriteCond <span class="sh_symbol">%</span><span class="sh_cbracket">{</span><span class="sh_value">https_REFERER</span><span class="sh_cbracket">}</span> <span class="sh_symbol">!^</span>https<span class="sh_symbol">(</span>s<span class="sh_symbol">)?:</span><span class="sh_comment">//(www.)?домен_дружественного сайта.ru [NC]</span>
RewriteCond <span class="sh_symbol">%</span><span class="sh_cbracket">{</span><span class="sh_value">https_REFERER</span><span class="sh_cbracket">}</span> <span class="sh_symbol">!</span>search<span class="sh_symbol">?</span>q<span class="sh_symbol">=</span>cache <span class="sh_symbol">[</span>NC<span class="sh_symbol">]</span>
# Форматы файлов<span class="sh_symbol">,</span> для которых устанавливается защита
# Выводит ошибку 403
# RewriteRule <span class="sh_symbol">\.(</span>jpe<span class="sh_symbol">?</span>g<span class="sh_symbol">|</span>bmp<span class="sh_symbol">|</span>gif<span class="sh_symbol">|</span>png<span class="sh_symbol">|</span>css<span class="sh_symbol">|</span>mov<span class="sh_symbol">|</span>swf<span class="sh_symbol">|</span>dcr<span class="sh_symbol">|</span>exe<span class="sh_symbol">|</span>rar<span class="sh_symbol">|</span>avi<span class="sh_symbol">|</span>vob<span class="sh_symbol">|</span>zip<span class="sh_symbol">|</span>pdf<span class="sh_symbol">|</span>txt<span class="sh_symbol">|</span>doc<span class="sh_symbol">|</span>flv<span class="sh_symbol">|</span>mp3<span class="sh_symbol">|</span>mp4<span class="sh_symbol">)</span>$ — <span class="sh_symbol">[</span>NC<span class="sh_symbol">,</span>F<span class="sh_symbol">,</span>L<span class="sh_symbol">]</span>
# или показывает спецрисунок вместо указанного
RewriteRule <span class="sh_symbol">.*\.(</span>jpe<span class="sh_symbol">?</span>g<span class="sh_symbol">|</span>bmp<span class="sh_symbol">|</span>gif<span class="sh_symbol">|</span>png<span class="sh_symbol">)</span>$ files<span class="sh_symbol">/</span>images<span class="sh_symbol">/</span>nohotlink<span class="sh_selector">.jpg</span> <span class="sh_symbol">[</span>NC<span class="sh_symbol">,</span>L<span class="sh_symbol">]</span>

В итоге все остальные сайты получат ошибку 403 Forbidden (т.е. Доступ запрещен) и ваша пропускная способность больше «не работает на других».

24. ImageCache и защита от хотлинка через .htaccess

Для ImageCache предыдущий пункт работать не будет, поэтому добавляем такие настройки:

SetEnvIfNoCase Referer «<span class="sh_symbol">^</span>$» local_ref<span class="sh_symbol">=</span>1
# Allowed domains
# Далее разрешенные домены
SetEnvIfNoCase Referer «<span class="sh_symbol">^</span>https<span class="sh_symbol">:</span><span class="sh_comment">//(www\.)?domain\.ru» local_ref=1</span>
SetEnvIfNoCase Referer «<span class="sh_symbol">^</span>https<span class="sh_symbol">:</span><span class="sh_comment">//(www\.)?domain\.com» local_ref=1</span>
# File extensions that you want to protect
# Расширения файлов<span class="sh_symbol">,</span> которые нужно защитить
<span class="sh_symbol">&lt;</span>FilesMatch "<span class="sh_symbol">\.(</span>bmp<span class="sh_symbol">|</span>jpe<span class="sh_symbol">?</span>g<span class="sh_symbol">|</span>gif<span class="sh_symbol">|</span>png<span class="sh_symbol">)</span>"<span class="sh_symbol">&gt;</span>
Order Allow<span class="sh_symbol">,</span>Deny
Allow from env<span class="sh_symbol">=</span>local_ref
<span class="sh_symbol">&lt;/</span>FilesMatch<span class="sh_symbol">&gt;</span>

Теперь у нас есть и защита от хотлинка и модуль ImageCache — вместе они работают превосходно. Одно «но» — таким способом, как вы видите не получится выдавать другую картинку; только защита своих изображений, что и является основной целью.

25. Мало этого?

Вот лучшие и подробные ресурсы по магическому .htaccess в Интернете:

Leave a comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *

два × четыре =

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Top Яндекс.Метрика