如何在AWS EC2 Linux上将HTML文件作为PHP处理?

时间:2019-07-08 19:19:17

标签: php amazon-ec2 fastcgi mod-fastcgi

我正在尝试移至AWS EC2,但遇到了一个症结所在。我花了整整一天的时间尝试可以在Stack Overflow和其他地方找到的所有可能的解决方案,但无济于事。

我想将.htm文件处理为PHP文件。以.php结尾的文件可以很好地处理,但是我无法将.htm文件作为PHP处理。

如果我在.htaccess中使用此“ AddHandler”语法,则不会发生任何事情:

AddHandler application/x-httpd-php .htm

“ x-httpd-php”实际上可以是任何东西。没关系甚至什么都不做:

AddHandler application/its-a-fish .htm

另一方面,使用这种“ AddType”语法总是导致文件被浏览器下载,而不是解析为代码:

AddType application/x-httpd-php .htm

再次,“ application /”后面的内容无关紧要。所有这些都会导致文件被下载而不是被处理:

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

下载文件后,Response标头中的Content-Type就是.htaccess中“ AddType”之后的内容,例如:

Content-Type: application/x-http-php73

那么也许我只是找不到我的PHP正在运行的“应用程序”标识符?

我已经尝试了大约10个小时内(尤其是在这些线程中)可以找到的每个代码示例,但是没有任何效果:

Server not parsing .html as PHP

Parsing HTML files as PHP

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

我怀疑它可以在我以前的所有服务器上运行而不是在AWS上运行的原因是因为PHP在AWS(而不是Apache Handler)上以FastCGI的身份运行在AWS上,但是我不知道如何使其与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 个答案:

答案 0 :(得分:2)

最终弄明白了这一点,这主要归功于这篇文章: 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
    

如果不做#2而做#1,则会出现“拒绝访问”错误。步骤2是解决此问题的方法。