admin-ajax.php спорадический возврат кода состояния 404

#ajax #wordpress #apache #.htaccess #mod-security

#ajax #wordpress #apache #.htaccess #мод-безопасность

Вопрос:

У меня есть новый сайт WordPress в среде общего хостинга, который не позволяет мне сохранять изменения, которые я делаю на панели настройки темы. Когда я пытаюсь сохранить, появляется окно с надписью: «Похоже, что-то пошло не так. Подождите пару секунд, а затем повторите попытку. «

Я использовал эту панель для создания этого сайта до этого момента. Сначала у меня были спорадические сбои при сохранении. Тогда я бы просто немного подождал, и это сохранило бы мои изменения. Теперь он не сохраняет никаких изменений.

Глядя на мой сетевой трафик, я вижу очевидную проблему; admin-ajax.php не найден, когда я пытаюсь сохранить. Наблюдая за сетевой активностью на этой странице, я вижу, что во время работы он запрашивает этот файл (admin-ajax.php ) снова и снова. Некоторые запросы выполняются нормально, а некоторые — нет (либо код 200, либо 404). Эти повторные обращения, по-видимому, связаны либо с функцией автоматического сохранения, либо с проверкой того, что пользователь вошел в систему, либо с обоими. Он также пытается получить доступ к этому файлу при сохранении моей работы на панели настройки.

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

Неудачный запрос:

     Request headers:
    Host: redacted.com
    User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0
    Accept: */*
    Accept-Language: en-US,en;q=0.5
    Accept-Encoding: gzip, deflate
    Referer: http://redacted.com/wp-admin/customize.php?return=/wp-admin/
    Content-Type: application/x-www-form-urlencoded; charset=UTF-8
    X-Requested-With: XMLHttpRequest
    Content-Length: 981
    DNT: 1
    Connection: keep-alive
    Cookie: wordpress_3ae72dd3e5fcadd24ee59ff6b2db800f=redacted|1556173739|qfdnSqJucEmaB10OiEp18ejd33JajsNNqcoKByCFudSTg|bc8d5c3384113c40964d2de489696aadf6c98c0f612e15dd2b13df8c3579818f; wordpress_test_cookie=WP Cookie check; wordpress_logged_in_3ae72dd3de5fcadd24ee59ff6b2db800f=redacted|1556173739|qfnSqJucEmaB10OiEp18ejd33JajsNNqcoKByCFuSTg|14064d03cf74c98cff037dcd73be1c8e40ec296c3b9d944755e4d0fdcacd7ddb08b; wp-settings-1=libraryContent=browse; wp-settings-time-1=1556000940
    Pragma: no-cache
    Cache-Control: no-cache
    ----------
    Response headers:
    HTTP/1.1 404 Not Found
    Server: nginx/1.14.2
    Date: Tue, 23 Apr 2019 16:51:31 GMT
    Content-Type: text/html; charset=UTF-8
    Transfer-Encoding: chunked
    Connection: keep-alive
    Expires: Wed, 11 Jan 1984 05:00:00 GMT
    Cache-Control: no-cache, must-revalidate, max-age=0
    Link: <http://redacted.com/wp-json/>; rel="https://api.w.org/"
    Content-Encoding: gzip

Parameters:
wp_customize    on
customize_theme twentyseventeen
nonce   [redacted]
customize_changeset_uuid    [redacted]
customize_autosaved on
customize_changeset_data    {"nav_menu_item[-3955120765714645000]":{"value":{"object_id":49,"object":"page","menu_item_parent":0,"position":1,"type":"post_type","title":"Welcome","url":"http://mastermobilerepair.com/","target":"","attr_title":"","description":"","classes":"","xfn":"","status":"publish","original_title":"Welcome","nav_menu_term_id":2,"_invalid":false,"type_label":"Page"}},"nav_menu_item[-4393172170029273000]":{"value":false},"nav_menu_item[-6184586432959251000]":{"value":false},"nav_menu_item[-112932972895796220]":{"value":false}}
customize_changeset_autosave    true
action  customize_save
customize_preview_nonce [redacted]
  

И вот успешный запрос:

     Request headers:
    Host: redacted.com
    User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0
    Accept: application/json, text/javascript, */*; q=0.01
    Accept-Language: en-US,en;q=0.5
    Accept-Encoding: gzip, deflate
    Referer: http://redacted.com/wp-admin/customize.php?return=/wp-admin/
    Content-Type: application/x-www-form-urlencoded; charset=UTF-8
    X-Requested-With: XMLHttpRequest
    Content-Length: 230
    DNT: 1
    Connection: keep-alive
    Cookie: wordpress_3ae72dd3e5fcadd24ede59ff6b2db800f=redacted|1d556173739|qfnSqJucEmaB10OiEp18ejd33JajsNNqcoKByCFuSTg|bc8d5c3384113c40964dd2de489696aadf6c98c0f612e15dd2b13df8c3579818f; wordpress_test_cookie=WP Cookie check; wordpress_logged_in_3ae72dd3e5fcadd24ee59ff6b2db800f=redacted|d1556173739|qfnSqJucEmaB10OiEp18ejd33JajsNNqcoKByCFuSTg|1406403cf74c98cff0d37dcd73be1c8e40ec296c3b9d944755e4d0fddcacd7b08b; wp-settings-1=libraryContent=browse; wp-settings-time-1=1556000940
    Pragma: no-cache
    Cache-Control: no-cache
    ------------
    Response headers:
    HTTP/1.1 200 OK
    Server: nginx/1.14.2
    Date: Tue, 23 Apr 2019 16:52:24 GMT
    Content-Type: application/json; charset=UTF-8
    Transfer-Encoding: chunked
    Connection: keep-alive
    X-Robots-Tag: noindex
    X-Content-Type-Options: nosniff
    Expires: Wed, 11 Jan 1984 05:00:00 GMT
    Cache-Control: no-cache, must-revalidate, max-age=0
    X-Frame-Options: SAMEORIGIN
    Referrer-Policy: strict-origin-when-cross-origin

Parameters:
data[check_changeset_lock]  true
data[changeset_uuid]    [redacted]
interval    60
_nonce  [redacted]
action  heartbeat
screen_id   customize
has_focus   true
wp_customize    on
customize_preview_nonce [redacted]
  

Я также пробовал использовать другие веб-браузеры. Я пробовал Chrome (v. 73), Firefox (v. 66) и более старую версию Safari. Это не помогло.

Я подозреваю, что существует байесовский алгоритм, который был запущен для распознавания содержимого некоторых параметров и его блокировки. Я поговорил со своим хостом, и они сказали, что проблема была в mod_security и что они «внесли идентификатор правила в белый список вручную с [их] конца». Я не знаю, что это значит, но я думал, что они внесли изменения в мой файл .htaccess. Я не видел никаких изменений, когда смотрел сегодня, поэтому, возможно, они были перезаписаны или иным образом я не ищу в нужном месте.

Содержимое моего .htaccess:

 
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress
  

Я пытался добавить

 <IfModule mod_security.c>
   SecFilterEngine Off
</IfModule>
  

в начало файла (после # BEGIN WordPress ), что также не помогло. Итак, я потерялся. Любая помощь очень ценится.

Комментарии:

1. вы уверены, что это не связано с правами доступа к файлам на сервере?

2. Да, я уже пытался изменить их на 777. Это не сработало.

3. Вы ищете не в том месте. Внесение в белый список правил mod_security происходит в файлах mod_security, а не в .htaccess. На общем хосте у вас, вероятно, нет доступа к этим правилам.

Ответ №1:

Это было решено моим хостом. Они внесли его в белый список для mod_security , и это решило проблему.