Файл .htaccess в WordPress: что это такое и для чего он нужен

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

Содержание

Что такое файл .htaccess в WordPress?

Основная цель файла  .htaccess – определить правила для веб-сервера Apache по работе с сайтом на WordPress. По умолчанию .htaccess в WordPress управляет отображением постоянных ссылок на сайте. Но с помощью файла .htaccess можно сделать гораздо больше.

Прежде чем мы начнем

Редактировать файлы WordPress без создания резервной копии не рекомендуется. Для этого можно использовать один из следующих вариантов:

  • Автоматическое резервное копирование сайта на WordPress.
  • Создание локальной копии сайта WordPress.
  • Создание тестовой версии сайта.
  • Создание копии текущей версии файла.htaccess - вы можете создавать резервные копии файла .htaccess перед внесением каких-либо изменений.

Как получить доступ к файлу .htaccess

Файл .htaccess располагается в корневом каталоге WordPress-сайта. Для доступа к нему можно использовать FTP-клиент, такой как FileZilla. По умолчанию этот файл является скрытым. Чтобы включить просмотр скрытых файлов в FileZilla, выполните следующие действия:

  1. Откройте FTP-клиент FileZilla и подключитесь к серверу.
  2. Перейдите в корневой каталог WordPress.
  3. В верхней части экрана выберите «Сервер».
  4. Затем пункт «Принудительно показать скрытые файлы».
Как получить доступ к файлу .htaccess

Если вы все еще не видите .htaccess, это означает, что на сайте нет этого файла. Чтобы создать его, в панель администрирования WordPress  в  «Настройки»> «Постоянные ссылки» и нажмите кнопку «Сохранить изменения».

Как получить доступ к файлу .htaccess - 2

После обновления состояния FTP-клиента, вы увидите файл .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. Я разобью эти правила на три основные категории:

  • Правила редиректов.
  • Для повышения скорости работы WordPress.
  • Обеспечение безопасности сайта.

Настройка редиректов

Рассмотрим наиболее распространенные правила редиректов:

301 (постоянный редирект)

Правило 301 редиректа сообщает браузеру и поисковым роботам, что URL был окончательно перемещен на другой URL. Пример правильного перенаправления:

Redirect 301 /oldpage.html http://www.yourwebsite.com/newpage.html

302 (временный) редирект

Если нужно временно перенаправить пользователей на другую страницу, используйте 302 редирект:

Redirect 302 /oldpagфe.html http://www.yourwebsite.com/newpage.html

Перенаправление к  www версии URL-адресов

Если нужно, чтобы URL-адреса сайта всегда начинались с www, используйте следующий код:

RewriteEngine on

RewriteCond %{HTTP_HOST} ^example.com [NC]

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

Перенаправление к  не-www версии URL-адресов

RewriteEngine on

RewriteCond %{HTTP_HOST} ^www.example.com [NC]

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

Перенаправление URL-адресов на HTTPS

Чтобы перенаправить пользователей и поисковых роботов на HTTPS-версию сайта используйте следующий код:

RewriteEngine On

RewriteCond %{HTTP:X-Forwarded-Proto} !https

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

Перенаправление URL-адресов на HTTP

Для принудительной установки не HTTPS-соединений на сайте используйте следующий код:

RewriteEngine On

RewriteCond %{HTTP:X-Forwarded-Proto} ^https$

RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI}</IfModule>

Перенаправление домен на подкаталог

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

RewriteCond %{HTTP_HOST} ^example.com$

RewriteCond %{REQUEST_URI} !^/sub-directory-name/

RewriteRule (.*) /subdir/$1

Перенаправление основного домена на другой домен

Чтобы перенаправить несколько доменных имен (например, abc.com, abc.net, abc.org) на один домен, используйте следующее правило:

Redirect 301 / http://www.abc.com/

Добавьте приведенное выше правило для доменов abc.net и abc.org, чтобы перенаправить их на abc.com.

Удаление строки Query_String

URL-адреса сайта отображают тот же контент при доступе с добавлением запроса. Например, веб-страница myblog.com также доступна по адресу myblog.com/?my=query. Это может привести к дублированию контента при сканировании сайта поисковыми роботами.

Чтобы решить данную проблему, удалите из URL-адреса строки запроса с помощью следующего кода:

RewriteCond %{THE_REQUEST} ^[A-Z]+ /.* HTTP

RewriteCond %{QUERY_STRING} !^$

RewriteRule .* https://www.mywebsite.com%{REQUEST_URI}? [R=301,L]

Установка языковой переменной на основе клиента

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

RewriteCond %{HTTP:Accept-Language} ^.*(de|es|fr|it|ja|ru|en).*$ [NC]

RewriteRule ^(.*)$ - [env=prefer-language:%1]

Перенаправление фидов WordPress на Feedburner

WordPress по умолчанию генерирует RSS-каналы для записей. Чтобы использовать сторонний генератор RSS-каналов (например, Feedburner) добавьте следующий код:

RewriteEngine On

RewriteBase /

RewriteCond %{REQUEST_URI} ^/feed.gif$

RewriteRule .* - [L]

RewriteCond %{HTTP_USER_AGENT} !^.*(FeedBurner|FeedValidator) [NC]

RewriteRule ^feed/?.*$ http://feeds.feedburner.com/apache/htaccess [L,R=302]

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . /index.php [L]

Оптимизация скорости работы WordPress с помощью правил .htaccess

Файл .htaccess содержит правила кэширования. С их помощью можно оптимизировать скорость работы WordPress-сайта.

Установка заголовков Expires для кеша браузера

Многие браузеры временно кэшируют CSS, JavaScript, HTML и некоторые мультимедийные файлы, такие как иконки часто посещаемых сайтов. Если эти элементы на сайте меняются не часто, можно увеличить срок действия этих ресурсов:

<IfModule mod_expires.c>

ExpiresActive on

ExpiresDefault                                    "access plus 1 month"

# CSS

ExpiresByType text/css                            "access plus 1 year"

# Data interchange

ExpiresByType application/json                    "access plus 0 seconds"

ExpiresByType application/xml                     "access plus 0 seconds"

ExpiresByType text/xml                            "access plus 0 seconds"

# Favicon (cannot be renamed!)

ExpiresByType image/x-icon                        "access plus 1 week"

# HTML components (HTCs)

ExpiresByType text/x-component                    "access plus 1 month"

# HTML

ExpiresByType text/html                           "access plus 0 seconds"

# JavaScript

ExpiresByType application/javascript              "access plus 1 year"

# Manifest files

ExpiresByType application/x-web-app-manifest+json "access plus 0 seconds"

ExpiresByType text/cache-manifest                 "access plus 0 seconds"

# Media

ExpiresByType audio/ogg                           "access plus 1 month"

ExpiresByType image/gif                           "access plus 1 month"

ExpiresByType image/jpeg                          "access plus 1 month"

ExpiresByType image/png                           "access plus 1 month"

ExpiresByType video/mp4                           "access plus 1 month"

ExpiresByType video/ogg                           "access plus 1 month"

ExpiresByType video/webm                          "access plus 1 month"

# Web feeds

ExpiresByType application/atom+xml                "access plus 1 hour"

ExpiresByType application/rss+xml                 "access plus 1 hour"

# Web fonts

ExpiresByType application/font-woff2              "access plus 1 month"

ExpiresByType application/font-woff               "access plus 1 month"

ExpiresByType application/vnd.ms-fontobject       "access plus 1 month"

ExpiresByType application/x-font-ttf              "access plus 1 month"

ExpiresByType font/opentype                       "access plus 1 month"

ExpiresByType image/svg+xml                       "access plus 1 month"

Включение Gzip-сжатия

Чтобы самостоятельно активировать GZIP-сжатие на WordPress-сайте, добавьте приведенное ниже правило в файл .htaccess.

<IfModule mod_deflate.c>

# Compress HTML, CSS, JavaScript, Text, XML and fonts

AddOutputFilterByType DEFLATE application/javascript

AddOutputFilterByType DEFLATE application/rss+xml

AddOutputFilterByType DEFLATE application/vnd.ms-fontobject

AddOutputFilterByType DEFLATE application/x-font

AddOutputFilterByType DEFLATE application/x-font-opentype

AddOutputFilterByType DEFLATE application/x-font-otf

AddOutputFilterByType DEFLATE application/x-font-truetype

AddOutputFilterByType DEFLATE application/x-font-ttf

AddOutputFilterByType DEFLATE application/x-javascript

AddOutputFilterByType DEFLATE application/xhtml+xml

AddOutputFilterByType DEFLATE application/xml

AddOutputFilterByType DEFLATE font/opentype

AddOutputFilterByType DEFLATE font/otf

AddOutputFilterByType DEFLATE font/ttf

AddOutputFilterByType DEFLATE image/svg+xml

AddOutputFilterByType DEFLATE image/x-icon

AddOutputFilterByType DEFLATE text/css

AddOutputFilterByType DEFLATE text/html

AddOutputFilterByType DEFLATE text/javascript

AddOutputFilterByType DEFLATE text/plain

AddOutputFilterByType DEFLATE text/xml

# Remove browser bugs (only needed for really old browsers)

BrowserMatch ^Mozilla/4 gzip-only-text/html

BrowserMatch ^Mozilla/4.0[678] no-gzip

BrowserMatch bMSIE !no-gzip !gzip-only-text/html

Header append Vary User-Agent

</IfModule>

Увеличение максимального размера загружаемого файла

По умолчанию размер загружаемого файла в WordPress составляет от 10 до 25 МБ. Чтобы загружать более объемные файлы, используйте приведенный ниже код:

php_value upload_max_filesize 64M

php_value post_max_size 64M

php_value max_execution_time 300

php_value max_input_time 300

Повышение безопасности сайта на WordPress

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

Защита файла .htaccess

Чтобы запретить доступ к файлу .htaccess, добавьте приведенное ниже правило:

<files ~ "^.*.([Hh][Tt][Aa])">

order allow,deny

deny from all

satisfy all

</files>

Ограничение доступа к панели администрирования WordPress

Чтобы ограничить доступ к панели администрирования CMS, создайте новый файл .htaccess, поместите его в папку /wp-admin и добавьте в него приведенный ниже код:

# Limit logins and admin by IP

<Limit GET POST PUT>

order deny,allow

deny from all

allow from xx.xx.xx.xx

</Limit>

Примечаниеxx.xx.xx.xx - только с этого IP-адреса пользователь сможет войти в панель администрирования WordPress.

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

Вы можете защитить файл паролем, используя приведенные ниже правила .htaccess.

<Files login.php>

AuthName "Prompt"

AuthType Basic

AuthUserFile /web/mywebsite.com/.htpasswd

Require valid-user

</Files>

Защита важных файлов

Чтобы защитить файлы php.ini и wp-config.php, используйте приведенные ниже правила для ограничения доступа:

<FilesMatch "^.*(error_log|wp-config.php|php.ini|.[hH][tT][aApP].*)$">

Order deny,allow

Deny from all

</FilesMatch>

Защита папки /wp-content

Папка /wp-content содержит файлы темы оформления, изображения и кэшированные файлы. Чтобы заблокировать доступ к ним, используйте следующий код:

Order deny,allow

Deny from all

<Files ~ ".(xml|css|jpe?g|png|gif|js)$">

Allow from all

</Files>

Блокировка IP-адресов

<Limit GET POST>

order allow,deny

deny from 123.456.78.9

allow from all

</Limit>

Блокировка доступа к определенным файлам

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

<files your-file-name.txt>

order allow,deny

deny from all

</files>

Блокировка хотлинкинга файлов, изображений и кражи ресурсов пропускного канала

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

RewriteEngine On

RewriteBase /

RewriteCond %{HTTP_REFERER} !^$

RewriteCond %{HTTP_REFERER} !^http://(www.)?mywebsite.com/.*$ [NC]

RewriteRule .(gif|jpg|swf|flv|png)$ /feed/ [R=302,L]

Заключение

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

Вадим Дворниковавтор-переводчик статьи «WordPress .htaccess File: What It Is and What You Can Do With It!»