1

我正在尝试迁移到 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

同样,“应用程序/”后面的内容无关紧要。所有这些都会导致文件被下载而不是被处理:

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

下载文件时,响应标头中的 Content-Type 是 .htaccess 中“AddType”之后的任何内容,例如:

Content-Type: application/x-http-php73

所以也许我只是没有找到我的PHP运行的“应用程序”标识符?

在大约 10 小时的时间里(尤其是在这些线程中),我几乎尝试了所有可以找到的代码示例,但没有任何效果:

服务器未将 .html 解析为 PHP

将 HTML 文件解析为 PHP

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

我怀疑它在我以前的所有服务器上运行而不是在 AWS 上运行的原因是因为 PHP 在 AWS 上作为 FastCGI 运行,而不是 Apache 处理程序,但我不知道如何使它与 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
4

1 回答 1

3

终于想通了,这主要归功于这篇文章: 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 步就是解决这个问题的方法。

于 2019-07-11T20:48:03.793 回答