Наверх

Прокачиваем сайт с помощью настройки правил .htaccess

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

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

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

При правильном использовании, конфигурационный файл .htaccess представляет собой очень мощное средство в инструментарии разработчика. Как защитить контент, как редиректить с одной страницы или домена на другой, как менять расширение с php на html и как кешировать страницы — далее в статье.

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

Основные выражения для записей кодов

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

$ — ограничение справа;
. — любой символ;
* — 0 и более символов;
[] — диапазон значений;
() — переменная;
+ — 1 и более символов;
\ — экранирование;
^ — ограничение слева.

1. Ограничение доступа к контенту

Если вам не нравится, что ваши картинки используется другими сайтами.

1
2
3
4
5
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)? yourdomain.com/ [nc]
RewriteRule .*.(gif|jpg|png)$ http://yourdomain.com/img/no_hotlinking.png[nc]

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

2. Ограничение доступа по user-agent

Блокируем всех пользователей, которые могут причинить вред серверу.

1
2
3
4
5
6
7
8
9
10
11
12
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>

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

3. Ограничение доступа для всех, кроме указанных IP-адресов

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

1
2
3
4
5
ErrorDocument 403 http:// yourdomain.com
Order deny,allow
Deny from all
Allow from 124.34.48.165
Allow from 102.54.68.123

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

4. Безопасный редирект 301

Чтобы перенаправить посетителя с одной страницы (домена) без ущерба для поисковых роботов.

1
Redirect 301 /d/file.html http://www.domainname.com/r/file.html

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

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

Директива позволяет в качестве запрашиваемого адреса использовать регулярное выражение (пересылка не «с документа», а «со всех документов, типа ...»). Редирект внешний — браузеру сообщается о необходимости загрузить другую страницу.

1
RedirectMatch [status] regexp URL

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

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

1
RedirectMatch 301 ^(.*)$ www.domainname.com/$1

Можно использовать не только статусы, но и другие условия:

1
2
RedirectMatch (.*)\.gif$ http://www.myserver.com$1.png
RedirectMatch (.*\.jpg)$ http://www.myanother.com$1

6. Перенос на новый домен

Перенаправляем пользователя на новый домен:

1
2
RewriteEngine On
RewriteRule ^(.*)$ http://www.domainname.com/ [R=301,L]

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

7. Перенаправление на собственные страницы ошибок

Чтобы перенаправить посетителя на самодельную 404-страницу

1
2
3
4
ErrorDocument 401 /error/401.php
ErrorDocument 403 /error/403.php
ErrorDocument 404 /error/404.php
ErrorDocument 500 /error/500.php

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

8. Подготовка черного списка IP адресов

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

1
2
3
allow from all
deny from 145.186.14.122
deny from 124.15.

Узнать IP адреса комментаторов можно или в логах Apache или с помощью сервисов статистики. Для WordPress, IP адреса комментаторов можно увидеть в административной панели.

9. Защита определенного файла от просмотра

В примере показано, как защитить .htaccess. При попытке просмотра посетитель попадает на страницу 403:

1
2
3
4
<Files .htaccess>
order allow,deny
deny from all
</Files>

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

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

1
2
ServerSignature EMail
SetEnv SERVER_ADMIN default@domain.com

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

11. Кеширование

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

1
2
3
4
5
6
7
FileETag MTime Size
<ifmodule mod_expires.c>
<filesmatch ".(jpg|gif|png|css|js)$">
ExpiresActive on
ExpiresDefault "access plus 1 year"
</filesmatch>
</ifmodule>

12. Gzip-сжатие

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

1
2
3
4
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

13. Сжатие с помощью mod_deflate

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

1
2
3
4
5
6
#Сжимаем элементы с помощью mod_deflate
<ifmodule mod_deflate.c="">
<filesmatch .(js|css)$="">
SetOutputFilter DEFLATE
</filesmatch>
</ifmodule>

14. Задание срока жизни через заголовки

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

1
2
3
<filesmatch .(ico|pdf|flv|jpg|jpeg|png|gif|swf)$="">
Header set Expires "Wed, 21 May 2010 20:00:00 GMT"
</filesmatch>

15. Установка страницы по умолчанию

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

1
DirectoryIndex about.html

16. Изменение URL без имен папок в адресе

Чтобы http://yoursite.com/folder/one/ изменить на http:// yourdomain.com/one/, добавьте строчку в ваш .htaccess.

1
RewriteRule ^folder/(.+)$ http://www.yourdomain.com/ [R=301,L]

17. Запрет просмотра папок

Чтобы запретить просмотр папок вашего сайта , используйте код ниже. Чтобы открыть доступ, замените минус на плюс.

1
Options All -Indexes

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
<files secure.php="">
AuthType Basic
AuthName "Prompt"
AuthUserFile /pub/home/.htpasswd
Require valid-user
</files>
#защита паролем папки
resides
AuthType basic
AuthName "This directory is protected"
AuthUserFile /pub/home/.htpasswd
AuthGroupFile /dev/null
Require valid-user

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

19. Редирект RSS-ленты WordPress на FeedBurner

Перенаправляем RSS на FeedBurner.

1
2
3
4
5
6
<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>

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

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

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

При добавлении комментария сервер сравнивает заголовок Referer с «wp-comments-post.php». Если он не совпадает, комментарий не добавится.

1
2
3
4
5
6
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]

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

21. Защита сайта от изменения GLOBALS

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

1
2
3
4
5
6
7
8
9
10
11
12
#Включаем отслеживание сим-ссылок
Options +FollowSymLinks
#Запускаем url_rewriting
RewriteEngine On
#Блокируем все ссылки, содержащие <script>
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
#Блокируем все скрипты, которые пытаются изменить переменные PHP Globals:
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
#Блокируем все скрипты, которые пытаются изменить переменную _REQUEST:
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
#Перенаправляем все подобные на страницу с ошибкой 403 - запрещено
RewriteRule ^(.*)$ index.php [F,L]

22. Удаление расширения файла из URL

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

1
RewriteRule ^(([^/]+/)*[^.]+)$ /.php [L]

23. Замена расширения файла

Меняем php на html.

Возможные ключи в квадратных скобках:
NC — no case — не различать в урлах прописные и строчные буквы
L — last — после этой директивы дальнейший анализ директив RewriteRule останавливается и прочие директивы не исполняются

1
2
3
RewriteEngine on
RewriteBase /
RewriteRule ^(.*)\.html$ $1.php [L]

24. Замена адреса страницы на человеко-понятный

Например, product.php?id=12 на product-12.html

1
2
RewriteEngine on
RewriteRule ^product-([0-9]+)\.html$ product.php?id=$1

25. Оптимизация адреса для поисковиков

Наиболее удобным для поисков будет поменять product.php?id=12 на product/ipod-nano/12.html . Данный код отображает адрес с главным ключевым словом.

1
2
RewriteEngine on
RewriteRule ^product/([a-zA-Z0-9_-]+)/([0-9]+)\.html$ product.php?id=$2

26. Редирект всех возможных вариантов адресов на одну страницу.

Как сделать редирект всех возможных вариантов набора адреса страницы на одну и ту же? Например, надо, чтобы страницы http://www.site.com, http://site.com, http://www.site.com/index.html, http://site.com/index.html все перенаправлялись на одну и ту же на http://www.site.com, тогда необходимо прописать:

1
2
3
4
5
6
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^site.com
RewriteRule (.*) http://www.site.com/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/
RewriteRule ^index\.html$ http://www.site.com/ [R=301,L]

27. Перенаправление www-адреса на не-www-адрес

www.site.com превращаем в site.com

1
2
3
4
RewriteEngine on
Options +FollowSymLinks
RewriteCond %{HTTP_HOST} ^www\.site\.com$ [NC]
RewriteRule ^(.*)$ http://site.com/$1 [R=301,L]

28. Перенаправление адреса без www на адрес с www

1
2
RewriteCond %{HTTP_HOST} ^site.ru$ [NC]
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]

29. Включение PHP в .html файлах

Директива позволяет убрать сопоставление по умолчанию .html и .htm файлов с файлами с гипертекстовой разметкой, и добавить их обработку php-интепретатором.

1
2
RemoveHandler .html .htm
AddType application/x-httpd-php .php .htm .html .phtml

Источники:

http://naikom.ru

http://www.proofsite.com.ua

Добавить комментарий

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