Jump to content

Ошибка rewrite:error AH10411: Rewritten query string contains control characters or spaces


DRNG
 Share

Go to solution Solved by FoxFireWWW,

Recommended Posts

Подскажите кто знает и разбирается в этом.

Стоит ли заменить в .htaccess

Это:

RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

На:

RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA,B]

 

Иногда появляется на сервере в  Журналы WWW-запросов такое 

[Thu Mar 12 20:36:50.151213 2026] [rewrite:error] [pid 8633] [client 172.106.199.154:0] AH10411: 
Rewritten query string contains control characters or spaces, referer: https://сайт.ru/shkafy/shkafy-kupe/shkaf-kupe-ekspress-s-3-zerkalami-sonoma-serebryanyj-profil-1800h600h2200.html

 

 

Link to comment
Share on other sites

  • Solution

@DRNG Можете смело менять. Добавление флага B — это прямое решение проблемы, описанной в ваших логах (AH10411).

 
Добавление флага
[B] — это правильное и необходимое решение для устранения ошибки AH10411, которая появилась после обновления Apache.

В чем причина ошибки?

Ошибка AH10411: Rewritten query string contains control characters or spaces возникает из-за изменений в системе безопасности Apache, начиная с версии 2.4.56 (март 2023 года) .

  • Суть проблемы: Теперь Apache блокирует (возвращает ошибку 403) внутренние переадресации (rewrites), в результате которых в строку запроса (_route_ в вашем случае) попадают пробелы или управляющие символы . Раньше это считалось допустимым, но теперь воспринимается как потенциальная угроза безопасности (CVE-2023-25690) .

  • Что происходит в вашем случае: В ссылке вида .../shkaf-kupe-ekspress-s-3-zerkalami-sonoma-serebryanyj-profil-1800h600h2200.html нет пробела. Проблема возникает из-за символа перевода строки или другого управляющего символа, который появляется в логах.

Почему флаг [B] решает проблему?

Флаг [B] (escape backreferences) предписывает Apache принудительно кодировать специальные символы (включая пробелы и управляющие символы) в URL-совместимый формат (%20 для пробела) до того, как они будут подставлены в строку запроса (index.php?_route_=$1) .

Таким образом, еще до того, как Apache проверит строку запроса на наличие "опасных" символов, они будут преобразованы в безопасный вид, и ошибка не возникнет.

Как правильно заменить?

Просто добавьте B к существующему списку флагов. Ваша новая строка будет выглядеть так:

RewriteRule ^([^?]*) index.php?_route_=$1 [B,L,QSA]

Именно такая замена (добавление B) рекомендуется в официальных источниках и на форумах поддержки как основной способ решения проблемы AH10411 .

Дополнительные рекомендации (если простого [B] окажется недостаточно)

В некоторых случаях флаг [B] может кодировать слишком много символов (например, & в строке запроса), что может повлиять на работу вашего приложения (например, сломается разбор $_GET) .

Если после замены вы заметили, что перестали работать какие-то параметры в URL, можно использовать более тонкую настройку, доступную в Apache 2.4.26 и новее: ограничить список символов для кодирования .

Например, чтобы кодировать только пробел и знак вопроса (оставляя остальные символы как есть), можно заменить правило на:

# Обратите внимание на кавычки вокруг флагов
RewriteRule ^([^?]*) index.php?_route_=$1 "[B= ?,L,QSA]"

Это может помочь сохранить работоспособность сложных URL .

Краткое резюме, почему это безопасно:

  1. Ошибка известная: Проблема возникла после обновления безопасности Apache и массово проявляется на многих хостингах.

  2. Решение официальное: Флаг B заставляет Apache экранировать "опасные" символы (вроде невидимого символа из вашего лога), превращая их в безопасный вид. Без этого флага Apache считает такие символы угрозой и блокирует запрос.

  3. Для вашего правила это штатная работа: Вы передаете URL в параметр _route_. Флаг B просто приводит этот URL к стандартному безопасному виду. Никакой магии или поломки функционала не произойдет.

Просто замените [L,QSA] на [L,QSA,B] (или [B,L,QSA] — порядок флагов не важен) и ошибка уйдет.

С вероятностью 99% этого будет достаточно для вашего сайта.

Источник www

 

Отпишитесь если поможет, ниже)

Link to comment
Share on other sites

Да, но это ответ ИИ . Стоит ли доверять? И если я заменю на 

RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA,B]

Ошибок может и не будет. 

Но! проблема наверное всё таки в другом откуда берутся лишние или скрытые пробелы или символы и перевод строки. 

Как вот это выяснить не понятно. Если смотреть на сам url вроде и нет ничего такого подозрительного. 

[Thu Mar 12 20:36:50.151213 2026] [rewrite:error] [pid 8633] [client 172.106.199.154:0] AH10411: 
Rewritten query string contains control characters or spaces, referer: https://сайт.ru/shkafy/shkafy-kupe/shkaf-kupe-ekspress-s-3-zerkalami-sonoma-serebryanyj-profil-1800h600h2200.html
Edited by DRNG
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...