Apache и php-fpm не работают для имени скрипта с косой чертой - PullRequest
0 голосов
/ 26 февраля 2019

У меня проблема с одним веб-сайтом после его перемещения на другой сервер.Старый не использовал php-fpm, новый - нет, и до сих пор у меня не было проблем, связанных с этим при переносе других сайтов.

С этим связано то, что он использует странный способдобиться символических ссылок.Посмотрите, что происходит в .htaccess:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

index.php взрывает PATH_INFO для получения необходимых параметров:

$url_elements = explode('/', $_SERVER['PATH_INFO']);

Домашняя страница работает нормально.Что не работает, так это все подстраницы.Я получаю Файл не найден. спереди и AH01071: Получена ошибка 'Основной скрипт неизвестен \ n' из php-fpm в журналах.

Моя идея таковаэто происходит потому, что php-fpm получает имя файла с косой чертой и обрабатывает его как путь.

Это конфигурация, которую Apache использует для обработки файлов PHP через php-fpm:

# Redirect to local php-fpm if mod_php is not available
<IfModule !mod_php7.c>
<IfModule proxy_fcgi_module>
    # Enable http authorization headers
    <IfModule setenvif_module>
    SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
    </IfModule>

    <FilesMatch ".+\.ph(ar|p|tml)$">
        SetHandler "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost"
    </FilesMatch>
    <FilesMatch ".+\.phps$">
        # Deny access to raw php sources by default
        # To re-enable it's recommended to enable access to the files
        # only in specific virtual host or directory
        Require all denied
    </FilesMatch>
    # Deny access to files without filename (e.g. '.php')
    <FilesMatch "^\.ph(ar|p|ps|tml)$">
        Require all denied
    </FilesMatch>
</IfModule>
</IfModule>

Я не могу позволить себе переписать код этого веб-сайта, чтобы сделать более удобные URL-адреса, потому что этот веб-сайт - просто небольшая страница, используемая для целей SEO, и компания не позволит сейчас тратить на это время.

Я был бы более чем рад, если бы кто-нибудь предоставил мне простое исправление этих ошибок.

Заранее спасибо!

...