Htaccess WordPress: правильная настройка файла
Лайфхаки на WP
57.7k.
При первичной настройке блога важно разумно сделать все технические составляющие. В первую очередь исправить файл htaccess под WordPress, потому что он регулирует серверные настройки Apache. Статья написана как не нужно делать, а рекомендаций по внедрению кода минимум. Прочитайте внимательно и не делайте грубых ошибок.
Содержание
- Где лежит htaccess
- Как создать чистый htaccess
- Что нужно добавить в htaccess обязательно
- Стандартный htaccess
- 301 редирект на https
- Как должен выглядеть правильный htaccess
- Что еще можно подключить в htaccess
- Кэш браузера
- Gzip сжатие
- Для безопасности и защиты wp-config
- Вывод настройки
Где лежит htaccess
Htaccess обязательно должен находится в корневой папке сайта, вместе с каталогами типа wp-admin.
У меня лежит как показано на снимке, иначе работать не будет, сервер его не найдет.
Как создать чистый htaccess
По умолчанию WordPress 5 должен создать htaccess, либо хостер добавляет его в каталог ресурса. Но бывает, что отсутствует, тогда создаем документ на компьютере с названием .htaccess с помощью стандартного блокнота.
Создать в блокноте- В меню выбираем Файл > Сохранить как
- Появляется окно, в нем вписываем название и папку для сохранения
- Нажимаем на Сохранить
После можно загрузить чистый документ на сервер или редактировать локально на компьютере, а потом перенести.
Что нужно добавить в htaccess обязательно
Перед правкой нужно скачать htaccess на компьютер, чтобы была резервная копия.
На данной стадии посмотрим, что изначально должно быть прописано и добавим обязательные директивы, без которых нельзя начинать работу с сайтом на WordPress.
Стандартный htaccess
Если htaccess не было изначально, то нужно добавить стандартный код, который WordPress прописывает при установке.
index\.php$ — [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Он проверен на множестве сайтов и работает безотказно. Никаких дублей, дыр в безопасности и остальных ошибок не наблюдали.
Этого достаточно для работы веб ресурса на вордпресс, единственный правильный htaccess. В других статьях интернета прописаны множество бесполезных директив, например для безопасности, кеширования и закрытия индексации. Они были написаны давно, и устарели не пользуйтесь их советами.
Разработчики WP сделали необходимые настройки в ядре и теперь не нужно вписывать в серверный документ непонятные строчки. В большинстве случаев блог перестанет отвечать, потому что в htaccess занесено много правил и они могут конфликтовать.
Что еще можно подключить в htaccess
Хостинги разные, поэтому не все предоставляют услуги внутренней оптимизации сервера, тогда приходится вручную прописывать правила в htaccess.
Спросите заранее в поддержке хостера, включены ли такие услуги как:
- Кэш браузера
- Gzip сжатие
- Защита wp-config, нет ли доступа его просмотреть
Кэш браузера
Для начала проверим активен ли кэш браузера на сайте, переходим на сервис webpagetest, вводим в поле url главной страницы и находим start scan.
Проверка функций блогаЖдем процесса проверки и смотрим на результаты. Ищем строчку Leverage browser caching и определяем кэшируются ли документы. В моем случае да, исключение – метрика, аналитика и vk, на них повлиять нельзя.
Есть ли кеш браузераПри условии если цифра равна нулю или маленькая, то напишите в поддержку хостинга с просьбой включить кэш браузера. При отказе вставляем такую запись в htaccess и проверяем заново.
<ifModule mod_headers.c> <FilesMatch "\.(html|htm)$">Header set Cache-Control "max-age=43100</FilesMatch> <FilesMatch "\.(js|css|txt)$">Header set Cache-Control "max-age=604700</FilesMatch> <FilesMatch "\.cgi-script$ </ifModule>
Такими встроенными возможностями обладают большинство провайдеров, например:
- Beget
- Timeweb
- Masterhost
Для безопасности и защиты wp-config
В 99,9% проблемы нет, но перестраховаться стоит. Заходим на сайт и приписываем к адресу /wp-admin.php, смотрим что выдает браузер.
Должна открыться пустая страница или произойти 301 переадресация на главную. Если покажется код документа, то нужно срочно его закрывать, просим помощи в поддержке, или прописываем вот такой текст.
<Files wp-config.php> order allow,deny deny from all </Files>
Посетители спрашивают, а нужно ли добавлять правила для плагинов WooCommerce, BBPress, Elementor и им подобным. Отвечу – нет, все встроено в сами плагинах. Будет полезно прочитать как создавать robots txt. В заключении дам видео инструкцию, чтобы сделать процесс более понятным.
Вывод настройки
Настройка htaccess в WordPress не сложная, потому что разработчики и хостер сделали все условия, чтобы снизить количество ошибок. В статье показал правильный вариант, в котором только стандартные директивы и перенаправление на https, остальные функции должны быть встроены и работать изначально. В любом случае сначала пишем в поддержку, и только потом делаем сами.
Пожалуйста, оцените материал:
Валентин
Давно занимаюсь и разрабатываю сайты на WordPress. Считаю что лучшего решения для ведения бизнеса не найти, поэтому считаю долгом делиться информацией с остальными.
.htaccess — стандартные правила
Блог
.htaccess — стандартные правила
Заказать сайт
Обратившись ко мне вы получите надежного и сведущего исполнителя, который быстро и качественно реализует любую задачу для Вас и Вашего бизнеса.
Работа с разделами Битрикс и компонентом catalog.section
Установка платного или бесплатного сертификатов ssl на Битрикс VM/CentOS 7
Битрикс не отправляется почта или попадает в спам
Яндекс.Маркет добавляем к тегу param пользовательский data аттрибут
Работа с датой на php в Битрикс и не только
Ошибки при обновлении Битрикс
Основные константы, функции и способы вывода в шаблонах Битрикс D7 и не только
Смотреть все
Правила .htaccess для стандартного проекта Битрикс
Options -Indexes
ErrorDocument 404 /404.php
<IfModule mod_headers.c>
# Все html и htm файлы будут храниться в кэше браузера один день
<FilesMatch "\.(html|htm)$">
Header set Cache-Control "max-age=1"
</FilesMatch>
# Все css, javascript и текстовые файлы будут храниться в кэше браузера одну неделю
<FilesMatch "\.(js|css|txt)$">
Header set Cache-Control "max-age=2592000"
</FilesMatch>
# Все флэш файлы и изображения будут храниться в кэше браузера одну неделю
<FilesMatch "\.
(flv|swf|ico|gif|jpg|jpeg|png|webp)$">
Header set Cache-Control "max-age=2592000"
</FilesMatch>
# Отключаем кеширование php и других служебных файлов
<FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
Header unset Cache-Control
</FilesMatch>
</IfModule>
<IfModule mod_deflate.c>
# Выставляем заголовок Content-Encoding: gzip.
AddEncoding gzip .gz
# Для favicon.ico
AddOutputFilterByType DEFLATE image/x-icon
# Для CSS-файлов.
AddOutputFilterByType DEFLATE text/css
# Для JavaScript-файлов.
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/json
# Для остальных типов файлов.
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/x-component
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/atom+xml
AddOutputFilterByType DEFLATE font/truetype
AddOutputFilterByType DEFLATE font/opentype
AddOutputFilterByType DEFLATE application/vnd.
(.*)$ /bitrix/urlrewrite.php [L]
RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
</IfModule>
<IfModule mod_dir.c>
DirectoryIndex index.php index.html
</IfModule>
<IfModule mod_expires.c>
ExpiresActive on
ExpiresDefault "access plus 1 month"
# CSS
ExpiresByType text/css "access plus 1 year"
# Data interchange
ExpiresByType application/atom+xml "access plus 1 hour"
ExpiresByType application/rdf+xml "access plus 1 hour"
ExpiresByType application/rss+xml "access plus 1 hour"
ExpiresByType application/json "access plus 0 seconds"
ExpiresByType application/ld+json "access plus 0 seconds"
ExpiresByType application/schema+json "access plus 0 seconds"
ExpiresByType application/vnd.
geo+json "access plus 0 seconds"
ExpiresByType application/xml "access plus 0 seconds"
ExpiresByType text/xml "access plus 0 seconds"
# Favicon (cannot be renamed!) and cursor images
ExpiresByType image/vnd.microsoft.icon "access plus 1 week"
ExpiresByType image/x-icon "access plus 1 week"
# HTML
ExpiresByType text/html "access plus 0 seconds"
# JavaScript
ExpiresByType application/javascript "access plus 1 year"
ExpiresByType application/x-javascript "access plus 1 year"
ExpiresByType text/javascript "access plus 1 year"
# Manifest files
ExpiresByType application/manifest+json "access plus 1 year"
ExpiresByType application/x-web-app-manifest+json "access plus 0 seconds"
ExpiresByType text/cache-manifest "access plus 0 seconds"
#Media files
ExpiresByType audio/ogg "access plus 3 month"
ExpiresByType image/bmp "access plus 3 month"
ExpiresByType image/gif "access plus 3 month"
ExpiresByType image/jpeg "access plus 3 month"
ExpiresByType image/png "access plus 3 month"
ExpiresByType image/svg+xml "access plus 3 month"
ExpiresByType image/webp "access plus 3 month"
ExpiresByType video/mp4 "access plus 3 month"
ExpiresByType video/ogg "access plus 3 month"
ExpiresByType video/webm "access plus 3 month"
#Web fonts
# Embedded OpenType (EOT)
ExpiresByType application/vnd.
ms-fontobject "access plus 3 month"
ExpiresByType font/eot "access plus 3 month"
# OpenType
ExpiresByType font/opentype "access plus 3 month"
# TrueType
ExpiresByType application/x-font-ttf "access plus 3 month"
# Web Open Font Format (WOFF) 1.0
ExpiresByType application/font-woff "access plus 3 month"
ExpiresByType application/x-font-woff "access plus 3 month"
ExpiresByType font/woff "access plus 3 month"
# Web Open Font Format (WOFF) 2.0
ExpiresByType application/font-woff2 "access plus 3 month"
# Other
ExpiresByType text/x-cross-domain-policy "access plus 1 week"
# Others
ExpiresByType application/pdf "access plus 3 month"
ExpiresByType application/x-shockwave-flash "access plus 3 month"
</IfModule>
#Отключение любого кеширования, на всякий случай
#<filesMatch "\.
/FOLDER_EXCLUDE/.*$Теги:
Предыдущий материал Битрикс: Автоматическая конвертация в webP и вывод изображений в шаблоне сайта
Следующий материал Установка memcached на BitrixVM и его активация в Битрикс
К списку статей
htaccess — Документация WordPress.org
.htaccess — это распределенный файл конфигурации, с помощью которого Apache обрабатывает изменения конфигурации для каждого каталога.
WordPress использует этот файл для управления тем, как Apache обслуживает файлы из своего корневого каталога и его подкаталогов. В частности, WP изменяет этот файл, чтобы иметь возможность обрабатывать красивые постоянные ссылки.
Эту страницу можно использовать для восстановления поврежденного файла .htaccess (например, некорректно работающего плагина).
# НАЧАТЬ WordPress
RewriteEngine включен
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Авторизация}]
Переписать Базу /
Правило перезаписи ^index\.
([_0-9- [Л]
Правило перезаписи. index.php [Л]
# ЗАВЕРШИТЬ Мультисайт WordPress
Опции
Любые опции, которым предшествуют + , добавляются к текущим действующим опциям, а любые опции, которым предшествуют – , удаляются из действующих опций.
Возможные значения директивы Options — любая комбинация:
Нет
Все параметры отключены.
Все
Все опции, кроме MultiViews. Это значение по умолчанию.
ExecCGI
Выполнение сценариев CGI с использованием mod_cgi разрешено.
FollowSymLinks
Сервер будет переходить по символическим ссылкам в этом каталоге.
Включения
Серверные включения, предоставляемые mod_include, разрешены.
Включает NOEXEC
Включения на стороне сервера разрешены, но команды #exec cmd и #exec cgi отключены.
Индексы
URL-адрес сопоставляется с каталогом, а не DirectoryIndex, форматированным списком каталога.
MultiViews
Контент, согласованный «MultiViews» разрешены с помощью mod_negotiation.
SymLinksIfOwnerMatch
Переходите только по символическим ссылкам, если цель принадлежит тому же идентификатору пользователя, что и ссылка.
Это отключит все опции, а затем включит только FollowSymLinks, что необходимо для mod_rewrite.
Опции Нет Параметры
DirectoryIndex
DirectoryIndex устанавливает файл, который Apache будет обслуживать, если будет запрошен каталог.
Можно указать несколько URL-адресов, и в этом случае сервер вернет первый найденный.
DirectoryIndex index.php index.html /index.php
DefaultLanguage
DefaultLanguage приведет к тому, что все файлы, с которыми еще не связан определенный языковой тег, будут использовать это.
Язык по умолчанию en
Кодировка по умолчанию
Установите кодировку символов по умолчанию, отправляемую в заголовке HTTP. См.: Установка информации о кодировке в .htaccess
AddDefaultCharset UTF-8
Установить кодировку для определенных файлов
AddType 'text/html; кодировка=UTF-8' .html
Набор для определенных файлов
AddCharset UTF-8 .html
ServerSignature
Директива ServerSignature позволяет настроить завершающую строку нижнего колонтитула для документов, созданных сервером. При необходимости добавьте строку, содержащую версию сервера и имя виртуального хоста, на страницы, созданные сервером (внутренние документы об ошибках, списки каталогов FTP, вывод mod_status и mod_info и т. д., но не документы, созданные CGI, или пользовательские документы об ошибках).
On
добавляет строку с номером версии сервера и ServerName обслуживающего виртуального хоста
Off
скрывает строку нижнего колонтитула
Email 9 0003
создает ссылку «mailto:» на ServerAdmin ссылочного документа
SetEnv SERVER_ADMIN admin@site.com Электронная почта для подписи сервера
Принудительная загрузка файлов
Нижеследующее приведет к тому, что любые запросы на файлы, оканчивающиеся на указанные расширения, не будут отображаться в браузере, а вместо этого вызовут диалоговое окно «Сохранить как», чтобы клиент мог загрузить.
Приложение AddType/октетный поток .avi .mpg .mov .pdf .xls .mp4
Сжатие HTTP
Директива AddOutputFilter сопоставляет расширение имени файла с фильтрами, которые будут обрабатывать ответы от сервера перед их отправкой клиенту. Это дополнение к любым фильтрам, определенным в другом месте, включая SetOutputFilter и AddOutputFilterByType. Это сопоставление объединяется с уже действующими, переопределяя любые сопоставления, которые уже существуют для того же расширения. 9Mozilla/4\.0[678] без gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
Принудительное сжатие для определенных файлов
SetOutputFilter DEFLATE
Директива Header позволяет отправлять заголовки HTTP для каждого запроса или только для определенных файлов.
Вы можете просматривать HTTP-заголовки сайтов с помощью Firebug, Chrome Dev Tools, Wireshark или онлайн-инструмента.
Набор заголовков X-Pingback "http://www.askapache.com/xmlrpc.php" Заголовок устанавливает Content-Language "en-US"
Это удалит заголовки HTTP, используя всегда будет очень стараться их удалить.
Заголовок не установлен Pragma Заголовок всегда отключен WP-Super-Cache Заголовок всегда отключается
Защита паролем при входе в систему
Это очень полезно для защиты файла wp-login.php . Вы можете использовать этот генератор htpasswd.
Базовая аутентификация
AuthType Базовая AuthName "Защищено паролем" AuthUserFile /полный/путь/к/.htpasswd Требовать действительного пользователя Удовлетворить все
Дайджест-аутентификация
AuthType Дайджест AuthName "Защищено паролем" AuthDigestDomain /wp-login.php https://www.askapache.com/wp-login.php AuthUserFile /полный/путь/к/.htpasswd Требовать действительного пользователя Удовлетворить все
Требовать определенный IP-адрес
Это способ разрешить доступ только к определенным IP-адресам.
ErrorDocument 401 по умолчанию ErrorDocument 403 по умолчанию Отклонить заказ, разрешить Запретить от всех Разрешить с локального хоста 198.101.159.98
Защита конфиденциальных файлов
Это запрещает любой веб-доступ к вашему файлу wp-config, error_logs, php.ini и htaccess/htpasswds.
Запретить заказ, разрешить Запретить от всех
Требовать SSL
Это заставит использовать SSL и потребует точное имя хоста, иначе будет перенаправлено на версию SSL. Полезно в файле /wp-admin/.htaccess .
SSLOptions +StrictRequire
SSLRequireSSL
SSLRequire %{HTTP_HOST} eq "www.wordpress.com"
Документ об ошибке 403 https://www.wordpress.com
- Официальное руководство по HTTP-серверу Apache: файлы .
htaccess - Краткий справочник официальной директивы Htaccess
- Руководство по Htaccess
- Google PageSpeed для разработчиков
- Глупые приемы Htaccess
- Advanced Mod_Rewrite 9023 8
- htaccess для подкаталогов
- Использование постоянных ссылок
- Изменение Права доступа к файлам
- Навыки оболочки UNIX
- API перезаписи
плагинов — Как запретить WordPress изменять разрешения .htaccess по умолчанию на 444
Я установил свой веб-сайт с помощью установщика - фантастика для быстрой установки.
Всего несколько дней назад я начал получать странную ошибку в плагине w3tc, и он попросил меня обновить через ftp, как вы можете видеть ниже:
Я обнаружил, что права доступа к файлу для htaccess были изменены на 444
Независимо от того, сколько раз я пытаюсь изменить его вручную, через некоторое время он становится 444 (около 30 секунд или если я что-то делаю в панели управления wp)
Какое-то время я могу переписать правила, а затем файл возвращается к тому, что вы видите ниже:
У меня есть виртуальный хостинг Hostgator.
Есть ли способ решить эту проблему?
Редактировать: я также пытался добавить данные ftp в свою конфигурацию wp. Не помогло
- плагины
- htaccess
- разрешения
- plugin-w3-total-cache
- ftp
5
Вероятно, ваш сайт взломан. На моем сайте было заражение Darkleech, которое внедрило вредоносный код в wp-includes/nav-menu.php , в результате чего .htaccess сбрасывался на 444 при любой загрузке страницы.
Я бы порекомендовал вам установить плагин Sucuri и позволить ему восстановить все поврежденные файлы. Предполагая, что ваш сайт был взломан, используйте вкладку Post-Hack для сброса плагинов, паролей и ключей. Также проверьте, не был ли создан другой пользователь-администратор. Используйте их вкладку «Закалка», чтобы защитить как можно больше. Вы также можете установить Wordfence для большей безопасности.
Если вы вносите изменения, а проблема продолжает возвращаться, вероятно, у вас есть брешь на корневом уровне вашего сервера, и тогда вам придется работать с вашим хостинг-провайдером, чтобы попытаться устранить инфекцию.
0
@David, вы правы насчет файла wp-includes/nav-menu.php . Я заметил и удалил его там, но это не помогло.
После нескольких недель исследований я наткнулся на этот пост об удалении бэкдора WordPress, выполнил шаги и вуаля, проблема была решена. Я также связался со своей хостинговой компанией, и они помогли мне усилить безопасность моего WordPress.
Вот некоторые шаги из упомянутого выше поста, которым я следовал, чтобы избавиться от этого бэкдора:
- Как можно скорее отключите свой сайт и измените права доступа к папке сайта на 600 .
- Переименуйте папку веб-сайта (public_html или имя вашего домена) в другое и создайте другую папку с тем же именем, что и оригинал. Поместите в эту папку файл с именем .maintenence. это переведет ваш сайт в режим обслуживания. Вы можете использовать любой HTML-код в файле .maintenance.
- Скачать WordPress. Убедитесь, что вы загружаете соответствующую версию.



cgi-script$
</ifModule>
(flv|swf|ico|gif|jpg|jpeg|png|webp)$">
Header set Cache-Control "max-age=2592000"
</FilesMatch>
# Отключаем кеширование php и других служебных файлов
<FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
Header unset Cache-Control
</FilesMatch>
</IfModule>
<IfModule mod_deflate.c>
# Выставляем заголовок Content-Encoding: gzip.
AddEncoding gzip .gz
# Для favicon.ico
AddOutputFilterByType DEFLATE image/x-icon
# Для CSS-файлов.
AddOutputFilterByType DEFLATE text/css
# Для JavaScript-файлов.
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/json
# Для остальных типов файлов.
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/x-component
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/atom+xml
AddOutputFilterByType DEFLATE font/truetype
AddOutputFilterByType DEFLATE font/opentype
AddOutputFilterByType DEFLATE application/vnd.

([_0-9- [Л]
Правило перезаписи. index.php [Л]
# ЗАВЕРШИТЬ Мультисайт WordPress
com
Электронная почта для подписи сервера
askapache.com/wp-login.php
AuthUserFile /полный/путь/к/.htpasswd
Требовать действительного пользователя
Удовлетворить все
htaccess