#php #mysql #wordpress
#php #mysql #wordpress
Вопрос:
У меня есть специальная настройка, при которой я предоставляю контент исключительно через статический XML-файл содержимого моего блога. Плагин создает статический XML каждый раз, когда публикуется новое сообщение в блоге в
/wp-content/folder/my.xml
Отлично. Теперь я перенаправляю своих пользователей, которые обычно приходят через URL RSS-канала, в этот статический файл через .htaccess:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
# Rewrite feed/ to Static Feed:
RewriteRule ^feed/?$ /wp-content/folder/my.xml [L,T=application/rss xml]
</IfModule>
# END WordPress
Кажется, что все это отлично работает — однако, глядя на MySQL, он находится под действительно большой нагрузкой из-за количества пользователей, которые получает мой сервер. Это странно, поскольку все, что он теоретически делает, это предоставляет им статический XML. Глядя на процессы в phpmyadmin, я вижу множество:
SELECT SQL_CALC_FOUND_ROWS wp_posts.* FROM wp_posts WHERE 1=1 AND wp_posts.post_type = 'post' AND ...
Который предлагает каждый запрос на / feed /? вызывает активность MySQL… почему??
Есть идеи?
Ответ №1:
Я полагаю, вам не хватает / в начале вашего регулярного выражения или RewriteBase /
объявления над ним.
Попробуйте изменить свое правило перезаписи следующим образом:
RewriteBase /
RewriteRule ^(feed/?)?$ /wp-content/folder/my.xml [L,T=application/rss xml]
Комментарии:
1. Спасибо. Я добавил RewriteBase / выше правила перезаписи, и это не возымело никакого эффекта … ?
2. 100%… все это в /?feed= rss2
3. Если это так, то /?feed=rss2, безусловно, не попадает под ваше правило перезаписи, и неудивительно, почему вы получаете активность MySQL.
4. Ах … на что мне следует изменить мое правило перезаписи?
5. Это очень близко… Теперь я, наконец, перенаправлен, но говорит /wp-content/folder/my.xml не может быть найден (хотя я могу перейти к нему)
Ответ №2:
Вы уверены, что этот файл генерируется ТОЛЬКО при публикации нового поста в блоге? Недействительный механизм регенерации — единственная причина, которая приходит мне на ум.
@Denis также правильно упомянул, что вы, возможно, перенаправляете не в то место. Пользователи могут вводить путь, который будет создавать XML-файл «на лету» для каждого запроса.
Редактировать:
Спасибо @Denis, но попробуйте один из:
RewriteRule ^?feed=rss2$ /wp-content/folder/my.xml [L,T=application/rss xml]
RewriteRule ^/?feed=rss2$ /wp-content/folder/my.xml [L,T=application/rss xml]
Комментарии:
1. Ну, глядя на файл, я могу отредактировать его вручную, и эти изменения не будут перезаписаны, пока я не опубликую снова …?
2. Если я вызываю статический файл XML напрямую, все в порядке… Я получаю статический файл … если я вызову первую точку входа в браузере, должна ли она измениться в адресной строке? в журналах доступа я вижу: «GET / ?feed=rss2 HTTP / 1.1″ 301 — ЗАТЕМ /feed / HTTP / 1.1» 200 18700
3. Это сломалось… может быть, мне следует повторить: мне нужно перенаправлять любые вызовы / ?feed = rss2 на /wp-content/folder/xml.xml
Ответ №3:
У меня была похожая проблема.
Я обнаружил, что кто-то время от времени напрямую (удаленно) бомбардировал мою базу данных MySQL. Вероятно, они раздобыли пароли, не знаю как.
Я решил это, установив MySQL в ‘safe_mode: On’ (используя cPanel / php.ini EZ Config)
Затем я также сменил пароль в cPanel.
После этого моя нагрузка резко снизилась.
Надеюсь, это поможет,
CGS
Обновление: Проблемы вернулись, поэтому вышеуказанное не помогло. После еще нескольких тестов я обнаружил, что именно плагин «WP Stats» вызывал множество запросов к базе данных. После того, как я деактивировал его, я больше не видел ошибок.