Ошибки JavaScript После Смены Серверов (WordPress)

#wordpress #iis-10 #windows-server-2019 #cloudflare-workers

Вопрос:

Я переместил сайт WordPress на новый сервер. Я сделал это, напрямую скопировав папку на новый сервер. Веб — сервер-IIS 10.0, а версия PHP-7.4.13. При редактировании поста я заметил, что не смог добавить изображение из Галереи. У меня также странная ошибка JavaScript, которая не происходит на старом сервере. Ошибка связана с thickbox.js:

введите описание изображения здесь

Ошибка в консоли заключается в следующем

 Uncaught SyntaxError: missing ) after argument list
 

Странно то, что исходный файл не содержит amp;quot:

введите описание изображения здесь

Я сравнил конфигурации IIS и не вижу никакой разницы. Больше ничего не изменилось, wp-config.php файл такой же, как и база данных. Кто-нибудь еще сталкивался с подобной проблемой?

Я столкнулся с этим вопросом, однако это относится к содержанию поста, что не является моей проблемой.

Обновление 2021/08/19

Что-то, что, как я думал, не могло вызвать эту проблему, было активным работником Cloudflare на маршруте. Изначально это было просто для выполнения 301 перенаправления на основе URL-адреса, хранящегося в KV. После изменения сервера я добавил некоторый код для обновления некоторых старых URL-адресов и обеспечения использования https. Когда я удалил Работника, ошибки JavaScript исчезли. Затем я отследил проблему с помощью HTMLRewriter, который я использовал (код приведен ниже). Я просто не уверен, почему метод замены вызывает проблему?

 class AttributeRewriter {
  constructor(attributeName) {
    this.attributeName = attributeName
  }

  element(element) {
    const attribute = element.getAttribute(this.attributeName)
    
    if (attribute) {
      let newValue = attribute.replace(new RegExp(blogOriginUrl, 'g'), blogPublicUrl).replace(new RegExp(csOriginUrl, 'g'), csPublicUrl).replace(new RegExp(httpUrl, 'g'), httpsUrl)

      element.setAttribute(this.attributeName, newValue)
    }
  }
}

const urlRewriter = new HTMLRewriter().on('a', new AttributeRewriter('href')).on('img', new AttributeRewriter('src')).on('img', new AttributeRewriter('srcset'))
 

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

1. Эта ошибка указывает на синтаксическую ошибку в вашем js. Может ли он нормально работать локально? Или вы можете проверить, есть ли соответствующие сообщения об ошибках в средстве просмотра событий.

2. @samwu, спасибо за комментарий. Я только что обновил вопрос. Проблема была вызвана HTMLRewriter, добавленным к работнику Cloudflare. Я все еще не уверен, почему метод замены вызвал проблему.

Ответ №1:

Проблема в том, что ваш работник использует HTMLRewriter для перезаписи ресурсы, которые на самом деле не являются HTML. В данном случае это переписывание файла JavaScript. HTMLRewriter предполагает, что все, что вы вводите, является HTML, и пытается проанализировать его как таковой. Здесь он увидел <img> тег, появляющийся в вашем JavaScript, и он думает, что это HTML-тег. Он проанализировал тег, а затем снова записал его немного другим способом, который применим для HTML, но не подходит для JavaScript.

В вашем работнике вам нужно убедиться, что вы применяете HTMLRewriter только к ответам, которые на самом деле являются HTML, на основе Content-Type . Нравится:

 if (response.headers.get("Content-Type").startsWith("text/html")) {
  // apply HTMLRewriter here
}