Wordpress. IIS. Произошла ошибка. Ответ не является допустимым ответом JSON.

Материал из rrv-wiki
Перейти к навигации Перейти к поиску


Собственно ошибка: "Произошла ошибка. Ответ не является допустимым ответом JSON" может быть по двум (известным мне) причинам:

1. Не настроен или не правильно настроен rewrite, в IIS проверяем файл web.conf в корне сайта, в нем должен быть примерно такой блок rewrite:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <rewrite>
		<rules>
			<rule name="WordPress" patternSyntax="Wildcard">
				<match url="*"/>
					<conditions>
						<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
						<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
					</conditions>
				<action type="Rewrite" url="index.php"/>
			</rule>
		</rules>
    </rewrite>
  </system.webServer>
</configuration>

Если wordpress лежит во вложенной папке сайта, например /mywp/, то в корневом web.conf добавляется блок rule:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <rewrite>
		<rules>
			<rule name="mywp" patternSyntax="Wildcard" stopProcessing="true">
				<match url="*" />
					<conditions>
						<add input="{URL}" pattern="/mywp/*" />
						<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
						<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
					</conditions>
				<action type="Rewrite" url="/mywp/index.php" />
			</rule>
			<rule name="WordPress" patternSyntax="Wildcard">
				<match url="*"/>
					<conditions>
						<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
						<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
					</conditions>
				<action type="Rewrite" url="index.php"/>
			</rule>
		</rules>
    </rewrite>
  </system.webServer>
</configuration>

2. Добавили в разрешённые методы GET, POST, HEAD, OPTIONS, PATCH

В обработчике php FastCGI обычно разрешено только GET, POST, мне хватило разрешить GET, POST, HEAD, OPTIONS, PATCH. Возможно понадобятся еще PUT, DELETE

Настраивается тут:

Диспетчер службы IIS -> WEB -> сайты -> имя_сайта

Затем заходим в:

Сопоставление обработчиков -> PHP8.1_via_FastCGI -> Ограничения запроса -> Команды

Настройка php FastCGI описана тут. Там почти все правильно :)