首页 > 解决方案 > .HTML 页面中的 PHP 无法在 Nginx 上解析

问题描述

我最近将一个站点从 Apache 迁移到 Nginx,现在 html 中的 php 代码没有被解析。.PHP 页面解析没有问题,您可以在本文底部的 phpinfo.php 附加图像输出中看到。

这是代码在 index.html 等页面中的样子:

<!-- Copyright -->
<? include("includes/copyright.php") ?>

        </body>
</html>

正如您所看到的,没有 <?php 包装代码的标签,但是,Apache 仍然会执行 php 包含,在这种情况下,它会在页面中添加一个带有版权信息的页脚。

同样,这不是一个 .php 文件,而是一个 .html 文件。

如果我将代码包装在<?php ?>标签中并将文件从 .html 重命名为 .php,则代码将解析,但这不是一个选项,因为该站点有数百个页面,并且每个文件都有多个 php 命令,例如上面的 include。

我已经按照许多帖子中的说明进行操作,但仍然无法使其正常工作……如果有人能阐明一下,我将不胜感激,因为我真的不知道还能尝试什么。

/etc/nginx/sites-available/mysite.com.conf

server {
        server_name mysite.com www.mysite.com;
        listen 111.111.11.111;
        root /home/mysite/public_html;
        index index.php index.htm index.html;
        access_log /var/log/virtualmin/mysite.com_access_log;
        error_log /var/log/virtualmin/mysite.com_error_log;
        fastcgi_param GATEWAY_INTERFACE CGI/1.1;
        fastcgi_param SERVER_SOFTWARE nginx;
        fastcgi_param QUERY_STRING $query_string;
        fastcgi_param REQUEST_METHOD $request_method;
        fastcgi_param CONTENT_TYPE $content_type;
        fastcgi_param CONTENT_LENGTH $content_length;
        fastcgi_param SCRIPT_FILENAME /home/mysite/public_html$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
        fastcgi_param REQUEST_URI $request_uri;
        fastcgi_param DOCUMENT_URI $document_uri;
        fastcgi_param DOCUMENT_ROOT /home/mysite/public_html;
        fastcgi_param SERVER_PROTOCOL $server_protocol;
        fastcgi_param REMOTE_ADDR $remote_addr;
        fastcgi_param REMOTE_PORT $remote_port;
        fastcgi_param SERVER_ADDR $server_addr;
        fastcgi_param SERVER_PORT $server_port;
        fastcgi_param SERVER_NAME $server_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param HTTPS $https;

        location ~ \.(php|html)$ {
                try_files $uri $fastcgi_script_name =404;
                fastcgi_pass unix:/var/php-nginx/1618253277225737.sock/socket;

                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;

        }

        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        listen 111.111.11.111:443 ssl;
        ssl_certificate /home/mysite/ssl.combined;
        ssl_certificate_key /home/mysite/ssl.key;

来自 Apache 服务器的 .htaccess:

AddType application/x-httpd-ea-php56 .html .htm
ErrorDocument 404 /error-page.html 
AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript

# BEGIN gzip file compression
# Compress HTML, CSS, JavaScript, Text, XML and fonts
...

phpinfo.php 的输出

short_open_tag 已启用

标签: phpnginxnginx-config

解决方案


<?是一个短开标签。

由于 PHP 5.3(从 2009 年开始!)支持默认关闭。(它与其他处理指令冲突,例如 XML 声明)。

您可以使用php.inishort_open_tag中的指令打开它


推荐阅读