18Дек 2016

0

350

Правила и настройка .htaccess

настройка htaccess, правила htaccess, хтаксес

Правила .htaccess. Редиректы и настройка .htaccess

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

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

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

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

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

Необходимо знать следующие моменты, что бы упростить задачу понимания кода и правил:

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

 

1. Удаление дублей страниц

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

Таким образом главным зеркалом Вашего сайта будет версия сайта site.ru

2. Защита изображений от скачивания

RewriteEngine on
RewriteCond %{HTTP_REFERER} .
RewriteCond %{HTTP_REFERER} !^http://([^.]+\.)?site\. [NC]
RewriteCond %{HTTP_REFERER} !google\. [NC]
RewriteCond %{HTTP_REFERER} !search\?q=cache [NC]
RewriteCond %{HTTP_REFERER} !msn\. [NC]
RewriteCond %{HTTP_REFERER} !yahoo\. [NC]
RewriteCond %{REQUEST_URI} !^/hotlink\.gif$
RewriteRule \.(gif|jpg|png)$ /hotlink.gif [NC,L]

Таким образом, все будут кто будут пытаться скачать изображение с Вашего сайта, будут скачивать изображение hotlink.gif, которое нужно положить в корень Вашего сайта, вместо тех изображений, которые он хочет скачать.

3. Универсальный редирект с www на без www

У редиректа нет жесткой привязки к домену, менять ничего не нужно:

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

 

4. Универсальный редирект с без www на www

Менять ничего не нужно, работает для любого имени домена:

RewriteCond %{HTTP_HOST} ^(.*)$ [NC]

RewriteCond %{HTTP_HOST} !^www\. [NC]

RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]

 

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

Этим правилом можно закрыть доступ к сайту для всех и открыть только для себя, на время разработки, например:

Order deny,allow
Deny from all
Allow from 124.34.48.165
Allow from 102.54.68.123

И наоборот, открываем доступ всем кроме:

Order allow,deny
Allow from all
Deny from 124.34.48.165
Deny from 102.54.68.123

6. Создаем собственные страницы ошибок. (на хостинге уже созданы бесплатно, нами)

С помощью следующего кода можно создать и указать собственные страницы ошибок для сайта:

ErrorDocument 401 /error/401.php
ErrorDocument 403 /error/403.php
ErrorDocument 404 /error/404.php
ErrorDocument 500 /error/500.php

7. Запрещаем доступ к сайту, для определенных IP

Добавив это код в файл .htaccess, Вы заблокируете доступ к сайту для указанных IP адресов:

allow from all
deny from 145.186.14.122

Кол-во IP адресов не ограничено, но учтите что обработка файла .htaccess может затормозить скорость загрузки Вашего сайта, если добавить много правил.

8. Защищаем доступ к любому файлу (например конфиги CMS)

Для этого достаточно добавить следующий код в Ваш файл .htaccess

<files .htaccess="">
order allow,deny
deny from all
</files>

9. Включаем сжатие для файлов mod_deflate (альтернатива Gzip, работает немного быстрее)

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

<ifmodule mod_deflate.c="">
<filesmatch .(js|css)$="">
SetOutputFilter DEFLATE
</filesmatch>
</ifmodule>

10. Увеличиваем время жизни заголовков

Просто добавляем код:

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

 

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

Создаем в нужной директории файл .htaccess и добавляем код

RewriteBase /

Options All -Indexes

Доступ будет запрещен к той папке в которой файл и всем вложенным директориям.

12. Redirect 301

Для установки простого 301 редиректа нужно добавить строку

Redirect 301 /page.html http://www.site.com/folder/page.html

 

13. Защита просмотра директорий

Добавляем в файл следующие строки:

Options All -Indexes

Если минус заменить на плюс, то мы разрешим просмотр этой директории.

14. Удаляем или меняем расширение URL, страниц сайта

Пример для удаления расширения .html

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

Меняем расширение с html на php

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

15. Перенаправляем пользователя с определенным IP, на другую страницу

Для этого добавляем следующий код:

SetEnvIf REMOTE_ADDR <нужный ip адрес> REDIR="redir"
RewriteCond %{REDIR} redir
RewriteRule ^/$ /another_page.html

16. Указываем в качестве стартовой страницы, любую страницу сайта

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

DirectoryIndex <нужная страница>

17. Меняем кодировку сайта, по-умолчанию

Для этого добавляем код

AddDefaultCharset UTF-8

Вместо UTF-8 можно указать любую другую, например CP-1251

18. Кеширование на сайте с помощью mod_headers и mod_expires

Для этого добавляем строки

<ifModule mod_headers.c>

#кэшировать html и htm файлы на один день

<FilesMatch "\.(html|htm)$">

Header set Cache-Control "max-age=43200"

</FilesMatch>

#кэшировать css, javascript и текстовые файлы на одну неделю

<FilesMatch "\.(js|css|txt)$">

Header set Cache-Control "max-age=604800"

</FilesMatch>

#кэшировать флэш и изображения на месяц

<FilesMatch "\.(flv|swf|ico|gif|jpg|jpeg|png)$">

Header set Cache-Control "max-age=2592000"

</FilesMatch>

#отключить кэширование

<FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">

Header unset Cache-Control

</FilesMatch>

</IfModule>

Дальше секция mod_expires

<ifModule mod_expires.c>

ExpiresActive On

#по умолчанию кеш в 5 секунд

ExpiresDefault "access plus 5 seconds"

#кэшировать флэш и изображения на месяц

ExpiresByType image/x-icon "access plus 2592000 seconds"

ExpiresByType image/jpeg "access plus 2592000 seconds"

ExpiresByType image/png "access plus 2592000 seconds"

ExpiresByType image/gif "access plus 2592000 seconds"

ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"

#кэшировать css, javascript и текстовые файлы на одну неделю

ExpiresByType text/css "access plus 604800 seconds"

ExpiresByType text/javascript "access plus 604800 seconds"

ExpiresByType application/javascript "access plus 604800 seconds"

ExpiresByType application/x-javascript "access plus 604800 seconds"

#кэшировать html и htm файлы на один день

ExpiresByType text/html "access plus 43200 seconds"

#кэшировать xml файлы на десять минут

ExpiresByType application/xhtml+xml "access plus 600 seconds"

</ifModule>

19. Редирект со страниц со слешем на страницы без слеша

Для этого добавляем код:

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} ![^\/]$
RewriteRule ^(.*)\/$ /$1 [R=301,L]

20. Редирект с http на https (хттп на хттпс)

RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

Если возникает ошибка попробуйте вот так:

RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

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