Если WordPress портит htaccess файл

Не понимаю я ситуацию, когда люди создают автономный блог на wordpress только для того, чтобы писать о том, как правильно возиться с этим блогом. Поэтому такого плана как этот посты у меня редкость.

В чем суть проблемы.

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

No input file specified

Такое сообщение показывается на любых страницах сайта, даже не связанных с wordpress. Данная ошибка возникает из-за того, что важный служебный файл .htaccess в корневом каталоге блога изменился. Этот файл прежде всего нужен для того, чтобы в WordPress работали ЧПУ ссылки. При этом веб-сервер очень болезненно реагирует на ошибки в этом файле. Каждый раз при возникновении “No input file specified” я видел, что в .htaccess файле появлялись лишние строчки, бессмысленное нагромождение символов, повторения. Например:

— начало файла —

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

# END WordPress
# BEGIN WordPress

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

# END WordPress
—- конец файла —-

Проблема решалась просто тем, что у меня был правильный .htaccess файл, которым я заменял испорченный и все сразу оживало. Я сначала думал, что это вирус или зловредный код в скриптах. Однако, оказалось, что сам wordpress имеет штатную возможность изменять .htaccess. Для этого в WordPress имеется функция flush_rules, которая находится в файле wp-includes/rewrite.php. Эту функцию могут вызывать плагины, поэтому можно поиском по вхождению “flush_rules” в код плагинов понять – может ли он испортить .htaccess или нет. Если вы не собираетесь ставить на свой блог в дальнейшем какие то особые плагины, затрагивающие .htaccess файл, то можно просто внести небольшие изменения в сам код WP дабы он не смог автоматически трогать .htaccess. Для этого в вышеуказанном файле wp-includes/rewrite.php необходимо найти строчку:

return insert_with_markers( $htaccess_file, ‘WordPress’, $rules );

и вместо нее написать:

return true;

При этом CMS при вызове flush_rules будет считать, что файл .htaccess успешно обновлен, хотя на самом деле он будет не тронут.

Поделиться:      twitter       facebook