DRNG Posted March 13, 2026 at 02:00 AM Share Posted March 13, 2026 at 02:00 AM Подскажите кто знает и разбирается в этом. Стоит ли заменить в .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 0 Quote Link to comment Share on other sites More sharing options...
Solution FoxFireWWW Posted March 13, 2026 at 02:18 AM Solution Share Posted March 13, 2026 at 02:18 AM @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 . Краткое резюме, почему это безопасно: Ошибка известная: Проблема возникла после обновления безопасности Apache и массово проявляется на многих хостингах. Решение официальное: Флаг B заставляет Apache экранировать "опасные" символы (вроде невидимого символа из вашего лога), превращая их в безопасный вид. Без этого флага Apache считает такие символы угрозой и блокирует запрос. Для вашего правила это штатная работа: Вы передаете URL в параметр _route_. Флаг B просто приводит этот URL к стандартному безопасному виду. Никакой магии или поломки функционала не произойдет. Просто замените [L,QSA] на [L,QSA,B] (или [B,L,QSA] — порядок флагов не важен) и ошибка уйдет. С вероятностью 99% этого будет достаточно для вашего сайта. Источник www Отпишитесь если поможет, ниже) 1 Quote Link to comment Share on other sites More sharing options...
DRNG Posted March 13, 2026 at 08:58 AM Author Share Posted March 13, 2026 at 08:58 AM (edited) Да, но это ответ ИИ . Стоит ли доверять? И если я заменю на 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 March 13, 2026 at 08:58 AM by DRNG 0 Quote Link to comment Share on other sites More sharing options...
FoxFireWWW Posted March 13, 2026 at 05:56 PM Share Posted March 13, 2026 at 05:56 PM В 13.03.2026 в 11:58, DRNG сказал: Да, но это ответ ИИ . Стоит ли доверять? https://support.cpanel.net/hc/en-us/articles/13088058673559-Apache-2-4-56-write-rules-return-a-403-if-there-is-a-space-in-the-URLhttps://support.cpanel.net/hc/en-us/community/posts/19163972817303-UPS-505-AH10411-errors-after-Apache-update-v2-4-56?sort_by=votes 0 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.