#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
}