Как стать автором
Обновить

Исправление ошибки 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-кодирования.

Шаги по исправлению

  1. Откройте файл конфигурации Apache для вашего виртуального хоста.

    Обычно он находится по пути:

    /home/USERNAME/conf/web/DOMAIN/apache2.conf

    Пример:

    /home/testhoster1/conf/web/idn-tést.eu/apache2.conf
  2. Найдите и удалите или закомментируйте следующие строки:

    <FilesMatch \.php$>
        SetHandler "proxy:unix:/run/php/php8.2-fpm-idn-tést.eu.sock|fcgi://localhost"
    </FilesMatch>
  3. Добавьте следующую строку вместо удаленных:

    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.

  4. Сохраните изменения в файле конфигурации.

  5. Перезапустите 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)

Видим версию 1.8.11
Видим версию 1.8.11

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

И замораживаем процесс до выхода обновления 1.9.0


Надеюсь данная статья будет полезна, благодарю за внимание.

Корректировки и правки в комментариях приветствуются ;)

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.