Intereting Posts
Невозможно загрузить результаты поиска с помощью ajax template_redirect сопровождать короткий код сохранение wp_editor в базу данных, но не отображение содержимого при обновлении Woo commerce – Непринятая ошибка: вызов функции-члена get () на null На какой точке (крючок) загружается значение_______по__и_по_па_ ()? Преобразование mysql в $ wpdb Доступ к базе данных WordPress за пределами WordPress Проблема с отображением одного сообщения из каждой категории Аутентификация группы Active Directory (AD) для просмотра сообщений WordPress? Запрос пользовательских типов сообщений показывает только первое сообщение Верхний регистр редактора Media Editor в нижнем регистре Добавление пользовательского поля в таксономический вход: панель Вернуть все пользовательские термины таксономии для публикации в REST API v2? В настоящее время ограничено 10 сроками Текст социальных ссылок отображается на выдержках Поиск темы для показа непрочитанных / обновленных сообщений с момента последнего посещения или подобного

Остановить WordPress и плагины от перезаписи .htaccess

Как я могу запретить WordPress и плагинам перезаписывать мой файл .htaccess ? Я использую WordPress для установки структуры моих постоянных ссылок; поэтому я сомневаюсь, что было бы практически отрицать все разрешения на файл.

Если маловероятно, что WordPress отвечает за переписывание файла, советы по определению того, что отвечает, будут полезны.

Недавно я добавил эти правила в .htaccess, чтобы перенаправить трафик на HTTPS.

  RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

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

 # BEGIN W3TC Page Cache core <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] RewriteCond %{HTTPS} =on RewriteRule .* - [E=W3TC_SSL:_ssl] RewriteCond %{SERVER_PORT} =443 RewriteRule .* - [E=W3TC_SSL:_ssl] RewriteCond %{HTTP:Accept-Encoding} gzip RewriteRule .* - [E=W3TC_ENC:_gzip] RewriteCond %{HTTP_COOKIE} w3tc_preview [NC] RewriteRule .* - [E=W3TC_PREVIEW:_preview] RewriteCond %{REQUEST_METHOD} !=POST RewriteCond %{QUERY_STRING} ="" RewriteCond %{REQUEST_URI} \/$ RewriteCond %{HTTP_COOKIE} !(comment_author|wp\-postpass|w3tc_logged_out|wordpress_logged_in|wptouch_switch_toggle) [NC] RewriteCond "%{DOCUMENT_ROOT}/wp-content/cache/page_enhanced/%{HTTP_HOST}/%{REQUEST_URI}/_index%{ENV:W3TC_SSL}%{ENV:W3TC_PREVIEW}.html%{ENV:W3TC_ENC}" -f RewriteRule .* "/wp-content/cache/page_enhanced/%{HTTP_HOST}/%{REQUEST_URI}/_index%{ENV:W3TC_SSL}%{ENV:W3TC_PREVIEW}.html%{ENV:W3TC_ENC}" [L] </IfModule> # END W3TC Page Cache core 

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

–Update– Поместив комментарии в несколько разделов файла .htaccess и заметив, какая из них была перезаписана, я обнаружил, что плагин W3 Total Cache переписывал весь раздел, прокомментированный с помощью

 # BEGIN W3TC Page Cache core 

Solutions Collecting From Web of "Остановить WordPress и плагины от перезаписи .htaccess"

Если вы поместите свои «настраиваемые» директивы вне каких-либо маркеров комментариев # BEGIN ... / # END ... то WordPress (и плагины) не должны перезаписывать их при их обновлении. (Конечно, если у вас есть плагины, которые не «играют хорошо», они могут сделать что угодно .htaccess если вы их разрешите, поэтому вам нужно будет сделать что-то вроде того, что предлагает @haz в этом случае.)

В вашем случае вы можете просто разместить эти директивы над # BEGIN W3TC Page Cache core . Например:

 # Custom directives RewriteCond %{HTTPS} off RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] # BEGIN W3TC Page Cache core <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{HTTPS} =on RewriteRule .* - [E=W3TC_SSL:_ssl] : 

Вам не нужно повторять RewriteEngine On (если она встречается где-то в файле). И ваши директивы не используют RewriteBase любом случае – но опять же, RewriteBase должен появляться только один раз в файле. (Последний экземпляр каждой из этих директив – это то, что контролирует весь файл.)

( Кроме того: круглые скобки вокруг шаблона RewriteRule являются излишними в вашей директиве.)

WordPress обязательно перепишет ваш файл .htaccess при определенных обстоятельствах, например, если вы измените Permalinks.

Как и вы, у нас есть куча пользовательских вещей из файла .htaccess, который я бы предпочел оставить в руках наших ребята devOps, а не WordPress.

Самый простой способ, если у вас есть доступ к серверу, – изменить права доступа к файлу на .htaccess

 & chmod aw .htaccess 

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

Кроме того, вы можете изменить владельца файла:

 & chown root:root .htaccess & chmod 644 .htaccess 

Это может не работать в зависимости от ваших пользовательских настроек Apache и почти наверняка не является опцией, предоставляемой вашим хостинг-провайдером.

Третья опция, которую вы можете использовать, которая еще раз требует от вас контроля над вашим сервером, заключается в том, чтобы поместить ваши неизменяемые настройки (например, переписывать HTTPS) в другой файл include в настройках VirtualHost.

 <VirtualHost *> ServerName www.mysite.com DocumentRoot /var/www/mysite.com/wordpress/ Include /var/www/mysite.com/custom-apache-settings.conf </VirtualHost> 

Как указано в его ответе, WordPress (и должен быть в состоянии) перезаписать .htaccess.

Однако вы можете использовать фильтр mod_rewrite_rules, чтобы добавить вас. Чтобы это было просто, вы можете добавить файл .htaccess.custom, поместить свои правила там и добавить его содержимое в $ rules в фильтре. Не забудьте вернуть $ rules.