Не понимаю я ситуацию, когда люди создают автономный блог на wordpress только для того, чтобы писать о том, как правильно возиться с этим блогом. Поэтому такого плана как этот посты у меня редкость.
В чем суть проблемы.
С какого то момента я заметил, что совершенно непредсказуемо мой уютный бложек становится недоступным. Вместо содержимого посетитель видит сообщение об ошибке:
Такое сообщение показывается на любых страницах сайта, даже не связанных с 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