Исправление ошибки AH01071: Got error 'Primary script unknown' HESTIACP v.1.8.12
Пишу гайд, т.к сам долго разбирался с ошибкой File not found, при работе с доменом типа: мойсайт.рф, либо другой сайт использующий специальные символы
Информация взята из этого источника
Мы можем рассмотреть на данный момент(10.11.2024) два способа исправления этой ошибки.
Начнем с первого способа
Проблема: При использовании Apache с PHP-FPM через модуль mod_proxy_fcgi может возникнуть проблема некорректной передачи параметров $_GET в PHP-скрипты. Это связано с тем, что Apache повторно кодирует URL, что приводит к неправильной обработке параметров.
Решение: Заменить директиву <FilesMatch> с SetHandler на ProxyPassMatch с опцией nocanon. Это позволит корректно передавать параметры запросов в PHP без повторного URL-кодирования.
Шаги по исправлению
Откройте файл конфигурации Apache для вашего виртуального хоста.
Обычно он находится по пути:
/home/USERNAME/conf/web/DOMAIN/apache2.confПример:
/home/testhoster1/conf/web/idn-tést.eu/apache2.confНайдите и удалите или закомментируйте следующие строки:
<FilesMatch \.php$> SetHandler "proxy:unix:/run/php/php8.2-fpm-idn-tést.eu.sock|fcgi://localhost" </FilesMatch>Добавьте следующую строку вместо удаленных:
ProxyPassMatch ^/(.*\.php)(?:$|\?) "unix:/run/php/php8.2-fpm-idn-tést.eu.sock|fcgi://localhost/home/testhoster1/web/idn-tést.eu/public_html/$1" nocanonОбъяснение параметров:
^/(.*\.php)(?:$|\?)— регулярное выражение, соответствующее всем запросам к файлам.php, включая параметры."unix:/run/php/php8.2-fpm-idn-tést.eu.sock|fcgi://localhost/..."— указывает путь к сокету PHP-FPM и корневой директории сайта.nocanon— предотвращает повторное URL-кодирование запроса Apache.
Сохраните изменения в файле конфигурации.
Перезапустите Apache для применения изменений:
sudo systemctl restart apache2
Пример изменений (diff)
<VirtualHost *:80>
ServerName idn-tést.eu
DocumentRoot /home/testhoster1/web/idn-tést.eu/public_html
<Directory /home/testhoster1/web/idn-tést.eu/public_html>
AllowOverride All
Options +Includes -Indexes +ExecCGI
</Directory>
- # <FilesMatch \.php$>
- # SetHandler "proxy:unix:/run/php/php8.2-fpm-idn-tést.eu.sock|fcgi://localhost"
- # </FilesMatch>
+ # Используем ProxyPassMatch с опцией nocanon для предотвращения повторного URL-кодирования
+ ProxyPassMatch ^/(.*\.php)(?:$|\?) "unix:/run/php/php8.2-fpm-idn-tést.eu.sock|fcgi://localhost/home/testhoster1/web/idn-tést.eu/public_html/$1" nocanon
SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0
IncludeOptional /home/testhoster1/conf/web/idn-tést.eu/apache2.conf_*
IncludeOptional /etc/apache2/conf.d/*.inc
</VirtualHost>
Объяснение
Почему
ProxyPassMatch? Эта директива позволяет более точно контролировать сопоставление запросов и передачу их на backend (PHP-FPM), включая параметры запроса.Роль
nocanon: Предотвращает повторное URL-кодирование Apache, что сохраняет исходные параметры$_GETбез искажений.
Заключение
После внесения этих изменений и перезапуска Apache проблема с передачей параметров $_GET должна быть устранена. Теперь PHP-скрипты будут правильно получать и обрабатывать параметры запросов.
Использование готового скрипта исправления
Долго инструкцию расписывать не буду, используем следующий скрипт
https://github.com/hestiacp/hestiacp/blob/8d5bd57c8fc5756a8664d15f9a69478df413b45c/install/upgrade/versions/1.9.0_extras/migrate_SetHandler_to_ProxySetMatch.phpДанный скрипт необходимо запускать каждый раз после добавления домена.
Я забыл сказать, что патч не изменяет настройки в файле apache2.ssl.conf. Из-за этого домен без SSL работает нормально, но с SSL всё ещё выдаёт "File not found".
Пока что я вышел из ситуации, сделав копию патча и изменив в нём переменную $conf_files, заменив строку на apache2.ssl.conf.
Второй способ
Устанавливаем заранее заготовленную панель хостером (скорее всего она версии 1.8.11)

Переходим в меню "CRON"

И замораживаем процесс до выхода обновления 1.9.0
Надеюсь данная статья будет полезна, благодарю за внимание.
Корректировки и правки в комментариях приветствуются ;)