Как мне обработать HTML-файлы как PHP на AWS EC2 Linux? - PullRequest
0 голосов
/ 08 июля 2019

Я пытаюсь перейти на AWS EC2, и я столкнулся с проблемой. Я потратил целый день, пытаясь найти любое возможное решение по переполнению стека и в других местах, но безрезультатно.

Я хочу обрабатывать файлы .htm как файлы PHP. Файлы, оканчивающиеся на .php, обрабатываются просто отлично, но я не могу заставить файлы .htm обрабатываться как PHP.

Если я использую этот синтаксис «AddHandler» в .htaccess, ничего не произойдет:

AddHandler application/x-httpd-php .htm

«x-httpd-php» может быть буквально любым. Это не важно Даже это ничего не делает:

AddHandler application/its-a-fish .htm

Использование этого синтаксиса "AddType", с другой стороны, всегда приводит к тому, что файл загружается браузером, а не анализируется как код:

AddType application/x-httpd-php .htm

Здесь снова, то, что следует за «приложением /», не имеет значения. Все это приводит к тому, что файл загружается вместо обработки:

AddType application/its-a-fish .htm
AddType application/x-http-php7 .htm
AddType application/x-http-php73 .htm

Когда файл загружается, Content-Type в заголовке Response соответствует тому, что следует после «AddType» в .htaccess, например ::

Content-Type: application/x-http-php73

Так, может быть, я просто не нашел идентификатор "application", под которым работает мой PHP?

Я пробовал буквально каждый пример кода, который смог найти за ~ 10 часов (особенно в этих потоках), но ничего не помогло:

Сервер не анализирует .html как PHP

Парсинг HTML-файлов как PHP

http://kb.cloudblue.com/en/115773

Я подозреваю, что причина того, что он работал на всех моих предыдущих серверах, а не на AWS, заключается в том, что PHP работает как AWC на ​​AWS как FastCGI, а не как Apache Handler, но я не могу понять, как заставить его работать с FastCGI.

Вот соответствующие пакеты, которые я сейчас установил:

[root@ip-172-31-30-111 etc]# rpm -qa | egrep 'http|php'
libnghttp2-1.31.1-1.amzn2.0.2.x86_64
httpd-tools-2.4.39-1.amzn2.0.1.x86_64
mod_http2-1.14.1-1.amzn2.x86_64
php-pdo-7.3.6-1.amzn2.0.1.x86_64
generic-logos-httpd-18.0.0-4.amzn2.noarch
httpd-filesystem-2.4.39-1.amzn2.0.1.noarch
httpd-2.4.39-1.amzn2.0.1.x86_64
php-json-7.3.6-1.amzn2.0.1.x86_64
php-mysqlnd-7.3.6-1.amzn2.0.1.x86_64
php-cli-7.3.6-1.amzn2.0.1.x86_64
php-common-7.3.6-1.amzn2.0.1.x86_64
php-fpm-7.3.6-1.amzn2.0.1.x86_64

1 Ответ

2 голосов
/ 11 июля 2019

I наконец-то понял это, прежде всего благодаря этому сообщению: https://talk.plesk.com/threads/cant-get-php-versions-to-serve-html-as-php.342045/page-2#post-854770

Вот что конкретно нужно сделать в AWS EC2 Linux:

  1. Добавьте эти строки в .htaccess, изменив раздел «Файлы», указав расширения, которые вы хотите обработать как PHP:

    <IfModule mod_proxy_fcgi.c>
    <Files ~ (\.htm$)>
    SetHandler proxy:unix:/run/php-fpm/www.sock|fcgi://127.0.0.1:9000
    </Files>
    </IfModule>
    
  2. Измените параметр security.limit_extensions в /etc/php-fpm.d/www.conf чтобы разрешить расширения, добавленные вами в .htaccess (плюс .php):

    security.limit_extensions = .php .htm
    
  3. Перезапустите службу php-fpm (перезапуск httpd не приведет к принудительному запускуперечитайте www.conf):

    service php-fpm restart
    

Если вы сделаете # 1 без выполнения # 2, вы получите ошибку «Отказано в доступе».Шаг №2 - это то, что исправляет это.

...