RSS-лента

Лучшие CMS интернета бесплатно для создания сайта

Июн
12

Что такое файл htaccess

Всем привет. Файл htaccess — это дополнительный конфигурационный документ на сервере Apache, и мощный инструмент разработки в умелых руках. С его помощью, можно изменить настройки прописанные в основном конфигурационном файле httpd.conf, к которому обычно хостер не дает прав доступа. Директория htaccess относятся к защите, перенаправлению, оптимизации контента, кодировке и т. д. Его влияние распространяется на каталоги и и папки, в которой он располагается.

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

файл htaccess

Содержимое файла htaccess на WordPress

WP автоматически генерирует файл htaccess, после настройки красивых ссылок в разделе «Постоянные ссылки». Стандартно выглядит он так:

# BEGIN WordPress

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# END WordPress

В htaccess, знак # воспринимают, как комментарий, так что не переживайте.

Если генерация не произошла, необходимо вручную создать и загрузить на сервер файл htaccess для wordpress. Чтобы избежать проблем при загрузке, временно изменяют уровень доступа к системе сервера на 777 или 775.
Для удобства редактирования файла htaccess, можно скачать и установить плагин All in One SEO или Seo by Yoast (плагины для сео-оптимизации). С их помощью, можно переписывать этот файл прямо в админке WP, без необходимости обращаться к файловой системе хостера.

Настройка htaccess для wordpress сайта

1. Прописываем запрет просмотра содержимого каталога (пусть будет к примеру каталог vverx), в котором нет файла index.txt.

Если, оставить стандартный файл, то по адресу в браузере http://goldserfer.ru/vverx/, любой пользователь может увидеть содержимое каталога и его файлов (листинг):

файл htaccess запрет листинга

Чтобы избежать этого, сразу после строки #  BEGIN WordPress прописывают следующую конструкцию:

<Directory /vverx/>
Options -Indexes
</Directory>

Директива Options позволяет задать ряд однотипных параметров. К примеру эта директива, может быть использована с параметром Indexes, которая в зависимости от знака ( -, + ), либо запрещает  показывать посетителю список файлов ( — ), если в выбранном каталоге нет файла index.txt или его аналога, либо разрешает ( + ). Эта директива очень актуальна, для защиты сайта от взлома хакерами.

2. По умолчанию WP работает с кодировкой UTF-8. Следующим кодом принудительно указываем метод кодирования, чтобы избежать проблем:

AddDefaultCharset UTF-8

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

3. Сжатие контента. Контент сжимается на сервере и распаковывается на стороне клиента незаметно для пользователя, что снижает трафик и ускоряет загрузку страниц. Но увеличивает нагрузку на сервер за счет дополнительных действий.
В Apache два способа сжатия, самым популярный с помощью модуля mod_deflate. В файл htaccess добавляем следующие строки:

<IfModule mod_deflate.c>
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
<ifmodule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_item_include file \.js$
mod_gzip_item_include file \.css$ </ifmodule>
</IfModule>

Для проверки заработало ли у вас сжатие mod_deflate или его предшественник Gzip, можно воспользоваться этим сервисом.

4. Кеширование позволяет еще больше оптимизировать скорость загрузки сайта. Однако это вопрос сложный, поскольку не все на странице можно сохранить. Это актуально для форумов, где часть информации статическая, и часть постоянно обновляется. Для кеширования в файле htaccess используются модули mod_expires и mod_headers. Для кажлого типа файлов указывается свой промежуток времени кеширования или отсутствие такового. Например, следующий код в mod_headers запрещает сохранять php-файлы в кеше.

# Запрещение кеширования документов с php расширением
<IfModule mod_headers.c>
Header append Cache-Control "no-store, no-cache, must-revalidate"
</IfModule>
<IfModule mod_expires.c>
ExpiresActive On ExpiresDefault "now"
</IfModule>

На мой взгляд самое оптимальное решение кеширования для всех типов файлов, можно описать следующей конструкцией:

# Включаем кэш в браузерах посетителей
<ifModule mod_headers.c>
# Все html и htm расширения будут храниться в кэше браузера один день
<FilesMatch "\.(html|htm)$">
Header set Cache-Control "max-age=43200"
</FilesMatch>
# Все css, javascript и txt форматы, будут храниться в кэше браузера одну неделю
<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>
# Отключаем кеширование php и других расширений
<FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
Header unset Cache-Control
</FilesMatch>
</IfModule>

Как сделать редирект htaccess правильно

Одна из основных возможностей htaccess — перенаправленные пользователей с одного URL или адреса на другой. Его используют, когда сайт переехал на другой домен, когда нужно «облагородить» страницы ошибок или страницы, которые были удалены. Это очень важный вопрос в seo-продвижении, так как неправильным редиректом, можно потерять часть ссылочной массы.
1. 301 — постоянный редирект, 302 — временный. При временном перенаправлении поисковые боты индексируют как старую, так и новые страницы. При постоянном — только новую.
Пример простого редиректа с одной страницы на другую страницу того же домена.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)sozdanie-i-nastrojka.html$ http://goldserfer.ru/new-sozdanie-i-nastrojka.html [R=301,L]
</IfModule>

Здесь, происходит простой редирект htaccess (301-й) со страницы: http://goldserfer.ru/sozdanie-i-nastrojka.html на новую страницу: http://goldserfer.ru/new-sozdanie-i-nastrojka.html

2. Доменное имя с «www» и без ведут на разные страницы. Это плохо воспринимается поисковыми ботами, а также теряется часть ссылок. С помощью 301-редиректа можно установить главное зеркало. В данном примере главным зеркалом будет страница без www:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.goldserfer.ru
RewriteRule ^(.*)$ http://goldserfer.ru/$1 [R=301,L]
</IfModule>

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

<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ /$1 [R=301,L]
</IfModule>

4. Защита от хотлинков. Хотлинк — это использование вашего контента (в основном тяжелого, видео и аудио) на чужих площадках. По сути это воровство интеллектуальной собственности, и с этим борются путем редиректа.

<IfModule mod_rewrite.c>
RewriteEngine On<br >
#В строке с ?yoursite\.ru/ меняете данную конструкцию на УРЛ Вашего сайта<br >
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?yoursite\.ru/ [NC]<br >
RewriteCond %{HTTP_REFERER} !^$<br >
#Меняем /images/exit.jpg на другое изображение.<br >
RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/exit.jpg [L]
</IfModule>

5. Также рекомендую сделать личные страницы ошибок, где будет краткое разъяснение причины ошибки. В таком случае вы не потеряете клиентов при возникновении ошибки, так как пользователь будет перенаправлен на специальную подготовленную страницу:

ErrorDocument 401 /401.html
ErrorDocument 403 /403.html
ErrorDocument 404 /404.html
ErrorDocument 500 /500.html

Запрет доступа к папкам htaccess

С помощью файла htaccess, можно запретить доступ извне к папкам или файлам или запретить отдельные User-Agent.
1. Запрет доступа к файлу  wp-config.php в примере:

<Files "wp-config.php">
Order Deny,Allow
Deny from all
</Files>

Данный код запретит серверу показывать wp-config.php пользователям сайта. В wordpress, обязательно нужно закрывать доступ к следующим файлам:

— wp-config.php — содержит логин и пароль.

— install.php — установочный файл (желательно его удалять после установки).

— readme.html — содержит различные данные.

2. Запрет доступа к сайту с определенных IP.

# Запрет доступа к сайту с IP 298.169.132.24
<Limit GET POST>
Order allow,deny
allow from all
Deny from 298.169.132.24
</Limit>

Если, есть необходимость блокировать несколько IP адресов, то просто снизу добавляете еще строчку Deny from 300.120.132.26
3. Запрет доступа к сайту определенных User-Agent. User-Agent — это идентификатор программы, пользователя или скрипта, просматривающего страницу. Среди нежелательных программ, могут быть старые браузеры или скрипты, сканирующие сайт. Полный список User-Agent можно найти в интернете.

# Запрет доступа к сайту плохих 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>

4. Защита административной панели WP предоставлением доступа только для одного IP.

<Files wp-login.php>
Order Deny,Allow
Deny from all
Allow from 192.168.0.100
</Files>

Где 192.168.0.100 это ваш постоянный IP адрес. Если адрес не постоянный (каждый раз при перезагрузке меняется) эту конструкцию использовать не получиться.

Скачать полный файл htaccess для wordpress

Итак, подведем итог и составим из всего перечисленного выше полный файл htaccess для wordpress. У меня он получился следующего вида:

# BEGIN WordPress
# *****************************Принудительно устанавливаем кодировку**************************
AddDefaultCharset UTF-8
# *********************************Делаем личные страницы ошибок******************************
ErrorDocument 401 /401.html
ErrorDocument 403 /403.html
ErrorDocument 404 /404.html
ErrorDocument 500 /500.html
# *******************************301-е редиректы с дублей страниц********************************
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} ^replytocom= [NC]
RewriteRule (.*) $1? [R=301,L]
RewriteRule (.+)/feed /$1 [R=301,L]
RewriteRule (.+)/comment-page /$1 [R=301,L]
RewriteRule (.+)/trackback /$1 [R=301,L]
RewriteRule (.+)/comments /$1 [R=301,L]
RewriteRule (.+)/attachment /$1 [R=301,L]
RewriteCond %{QUERY_STRING} ^attachment_id= [NC]
RewriteRule (.*) $1? [R=301,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# ******************************Включаем кэш в браузерах посетителей***************************
<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>
# Отключаем кеширование php и других служебных файлов
<FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
Header unset Cache-Control
</FilesMatch>
</IfModule>
# *****************************************Включаем gzip сжатие*********************************
<IfModule mod_deflate.c>
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
<ifmodule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_item_include file \.js$
mod_gzip_item_include file \.css$ </ifmodule>
</IfModule>
# ***********************Перенаправление с зеркала с www на без www**************************
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.goldserfer.ru
RewriteRule ^(.*)$ http://goldserfer.ru/$1 [R=301,L]
</IfModule>
# **********************Перенаправление с rss 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/goldserfer/xhzw[R=302,NC,L]
</IfModule>
# *************************Запрет доступа к сайту плохих 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>
#******************************Запрет доступа к файлу wp-config.php*****************************
<Files wp-config.php>
order allow,deny
deny from all
</Files>
#**************************Запрет доступа к файлу wp-config.php.bak*****************************
<Files wp-config.php.bak>
order allow,deny
deny from all
</Files>
#*******************************Запрет доступа к файлу install.php********************************
<Files install.php>
order allow,deny
deny from all
</Files>
#*****************************Запрет доступа к файлу readme.html************************************
<Files readme.html>
order allow,deny
deny from all
</Files>
#****************************************Запрет доступа*********************************************
<Files .htaccess>
order allow,deny
deny from all
</Files>
# ***************************Запрет доступа к сайту с IP 52.27.84.25********************************
<Limit GET POST>
Order allow,deny
allow from all
Deny from 52.27.84.25
</Limit>

Файл htaccess я выложил на файлообменник теперь его можно скачать здесь.

Конечно, возможно я что-то упустил, но я надеюсь что в комментариях мы вместе дополним этот файл.

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

Получай первым обновления блога!

Введите Ваш e-mail:


Комментарии (2) на “Что такое файл htaccess”

  • Григорий (1 коммент.) 17 Июнь 2015 в 16:25

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

  • Аркадий (1 коммент.) 26 Август 2016 в 15:49

    Здравствуйте. Установили Ubuntu 16.04 wordpress
    После установки темы и параметра чтобы отображались в браузере ссылки с окончанием .html перестали работать страницы кроме главной.

    Файл. .htaccess настроен virtual host 80 прописан правильно, плагин установлен .html on PAGES при отключении также проблема не пропадает и права на файл .htaccess
    также установлены наивысшие.

    Что можно сделать ? подскажите пожалуйста,

Оставить комментарий


вверх